天天看點

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

資料準備是一項必須具備的技術,是一個疊代且靈活的過程,可以用于查找、組合、清理、轉換和共享資料集,包括用于分析/商業智能(BI)、資料科學/機器學習(ML)和自主資料內建中。具體來說,資料準備是在處理和分析之前對原始資料進行清洗和轉換的過程,通常包括重新格式化資料、更正資料群組合資料集來豐富資料等。

本次資料分析實戰系列運用股市金融資料,并對其進行一些列分析處理。處理金融資料是量化分析的基礎,當然方法都是通用的,換做其他資料也同樣适用。本文回顧資料分析常用子產品

Pandas

NumPy

,回顧

DataFrame

array

matrix

基本操作。

股市資料擷取的幾個子產品

Tushare

Tushare是一個免費、開源的python财經資料接口包。主要實作對股票等金融資料從資料采集、清洗加工到資料存儲的過程,能夠為金融分析人員提供快速、整潔、和多樣的便于分析的資料,為他們在資料擷取方面極大地減輕工作量,使他們更加專注于政策和模型的研究與實作上。

  • 首先使用pip安裝第三方依賴庫

    tushare

    下載下傳股市資料。(國内)
pip install tushare -i https://pypi.douban.com/simple/
           

複制

  • 然後在

    tushare.pro

    注冊使用者,注意擷取你自己的

    token

    。使用

    daily

    函數擷取日線資料。
# 導入tushare庫
import tushare as ts
# 設定token
ts.set_token('your token here')
# 初始化pro接口
pro = ts.pro_api()
# 擷取日線資料
df = pro.daily(ts_code='000001.SZ', start_date='20180701', end_date='20180718'
           

複制

Baostock

證券寶(http://www.baostock.com)是一個免費、開源的證券資料平台(無需注冊)。提供大量準确、完整的證券曆史行情資料、上市公司财務資料等。通過python API獲驗證券資料資訊,滿足量化交易投資者、數量金融愛好者、計量經濟從業者資料需求。

  • 首先使用pip安裝第三方依賴庫

    baostock

    下載下傳股市資料。(國内)
pip install baostock -i https://pypi.douban.com/simple/
           

複制

  • 然後使用

    query_history_k_data_plus

    函數擷取日線資料
import baostock as bs
import pandas as pd

# 登陸系統
lg = bs.login()
# 擷取滬深A股曆史K線資料
rs_result = bs.query_history_k_data_plus("sh.600000",
                                         fields="date,open,high, low, close,preclose,volume,amount,adjustflag",
                                         start_date='2017-07-01', 
                                         end_date='2017-12-31', 
                                         frequency="d", 
                                         adjustflag="3")
df_result = rs_result.get_data()
# 登出系統
bs.logout()
           

複制

Yfinance

yfinance

的老版本是

fix_yahoo_finance

,二者都可以使用,推薦使用新版本。

  • 首先使用pip安裝第三方依賴庫

    fix_yahoo_finance

    下載下傳

    yahoo

    股市資料。(國外)
pip install fix_yahoo_finance -i https://pypi.douban.com/simple/
           

複制

如果發生報錯:

ModuleNotFoundError: No module named 'yfinance'

,則需要事先安裝

'yfinance'

,最新版本已經将

fix_yahoo_finance

調整

'yfinance'

pip install yfinance -i https://pypi.douban.com/simple/
           

複制

  • 然後使用

    pdr_override

    函數擷取日線資料
import yfinance as yf
# 輸入
symbol = 'AMD'
start = '2014-01-01'
end = '2018-08-27'

dataset=yf.pdr_override(symbol,start,end)
dataset.head()
           

複制

下面開始本節主要内容,運用資料處理最常用的第三方子產品

Pandas

NumPy

擷取資料,為後續資料分析、機器學習做資料準備。

pandas

pandas 是基于NumPy 的一種工具,該工具是為解決資料分析任務而建立的。Pandas 納入了大量庫和一些标準的資料模型,提供了高效地操作大型資料集所需的工具。pandas提供了大量能使我們快速便捷地處理資料的函數和方法。你很快就會發現,它是使Python成為強大而高效的資料分析環境的重要因素之一。

# Pandas Library
>>> import pandas as pd
>>> import warnings
>>> warnings.filterwarnings("ignore")
           

複制

擷取中國平安股票資料

>>> import baostock as bs
# 登陸系統
>>> lg = bs.login()
# 擷取滬深A股曆史K線資料
>>> rs_result = bs.query_history_k_data_plus("sh.601318",  
                        fields="date,open,high,low,close,volume",   
                        start_date='2018-01-01',   
                        end_date='2021-03-31',  
                        frequency="d",  
                        adjustflag="3")
>>> df_result = rs_result.get_data()
# 登出系統 
>>> bs.logout()
login success!
logout success!
<baostock.data.resultset.ResultData at 0x28d05a44ac8>

>>> df_result.head()
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

擷取騰訊股票資料

>>> import yfinance as yf

>>> symbol = 'TCEHY'
>>> start = '2016-01-01'
>>> end = '2021-03-31'
>>> yf.pdr_override()

>>> dataset = yf.download(symbol,start,end)
[*********************100%***********************]  1 of 1 completed

>>> dataset.head()
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

檢視尾部資料

dataset.tail()
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備
>>> dataset.shape
(1320, 6)
           

複制

滾動視窗計算

dataset.rolling(window=5).mean() # 求最後4行的均值
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備
  • 函數解析
dataset.rolling(
    window,
    min_periods=None,
    center=False,
    win_type=None,
    on=None,
    axis=0,
    closed=None,)
           

複制

提供滾動視窗計算。

window:也可以省略不寫。表示時間窗的大小,注意有兩種形式(int or offset)。如果使用int,則數值表示計算統計量的觀測值的數量即向前幾個資料。 如果是offset類型,表示時間窗的大小。

min_periods:每個視窗最少包含的觀測值數量,小于這個值的視窗結果為NA。值可以是int,預設None。offset情況下,預設為1。

center: 把視窗的标簽設定為居中。布爾型,預設False,居右

win_type: 視窗的類型。截取窗的各種函數。字元串類型,預設為None。各種類型

on: 可選參數。對于dataframe而言,指定要計算滾動視窗的列。值為列名。

axis: int、字元串,預設為0,即對列進行計算

closed:定義區間的開閉,支援int類型的window。對于offset類型預設是左開右閉的即預設為right。可以根據情況指定為left both等。

指數權重函數ewm

>>> dataset['ewm'] = dataset['Adj Close'].ewm(span=20,
                                              min_periods=0,
                                              adjust=False,
                                              ignore_na=False).mean()
>>> dataset.head()
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備
  • 函數解析
DataFrame.ewm(com=None,  
            span=None,  
            halflife=None,  
            alpha=None,  
            min_periods=0,  
            adjust=True,  
            ignore_na=False,  
            axis=0,  
            times=None)
           

複制

提供指數權重(EW)函數。可用EW功能:

mean()

var()

std()

corr()

cov()

。參數:

com

span

halflife

,或

alpha

必須提供。

com float, optional

根據質心指定衰減,

\alpha = 1/(1+com), com\ge 0

span float, optional

跨度,根據跨度指定衰減,

\alpha=2/(span+1), span\ge1

halflife float, str, timedelta, optional

半衰期,根據半衰期指定衰減,

α=1−\exp(−\ln(2)/halflife),halflife > 0

如果

times

指定,則觀察值衰減到其值一半的時間機關(str或timedelta)。僅适用于

mean()

,半衰期值不适用于其他功能。

alpha float, optional

直接地指定平滑系數

\alpha

0<\alpha \le1

min_periods int, default 0

視窗中具有值的最小觀察數(否則結果為NA)。

adjust bool, default True

調整,在開始期間除以遞減的調整因子,以解決相對權重的不平衡問題(将EWMA視為移動平均值)。

  • adjust=True

    (預設)時,EW功能是使用權重計算的

w_i=(1−α)^i

。例如,該系列的EW移動平均值

[x_0,x_1,...,x_t]

将會

y_t= \frac{x_t+(1-\alpha)x_{t-1}+(1-\alpha)^2x_{t-2}+...+(1-\alpha)^tx_0}{1+(1-\alpha)+(1-\alpha)^2+...++(1-\alpha)^t}

  • adjust=False

    為時,将以遞歸方式計算指數權重函數:

y_0=x_0 \\

y_t=(1-\alpha)y_{t-1}+\alpha x_t

ignore_na bool, default False

計算權重時忽略缺失值;指定

True

重制0.15.0之前的行為。

  • ignore_na=False

    (預設)時,權重基于絕對位置。例如,權重

x_0

x_2

用于計算

[x0, None, x2]

的最終權重平均數,如果

adjust=True

,則權重分别是

(1−\alpha)^2

和 1。如果

adjust=False

,權重分别是

(1−\alpha)^2

\alpha

  • ignore_na=True

    時,權重基于相對位置。例如,權重

x_0

x_2

用于計算

[x0, None, x2]

的最終權重平均數,如果

adjust=True

,則權重分别是

1−\alpha

1。如果

adjust=False

,權重分别是

1−\alpha

\alpha

提取資料

# iloc[] 
>>> print(dataset.iloc[0][0])
19.59000015258789

# iat[] 
>>> print(dataset.iat[0,0])
19.59000015258789
           

複制

at

的使用方法與loc類似,但是比

loc

有更快的通路資料的速度,而且隻能通路單個元素,不能通路多個元素。

iat

iloc

類似。
# loc[]
>>> print(df.loc[0]['High'])
19.65999984741211
# iloc[]
>>> print(df.iloc[0])
           

複制

Date 2015-12-31 00:00:00

Open 19.59

High 19.66

Low 19.51

Close 19.62

Adj Close 19.3691

Volume 382600

ewm 19.3691

Name: 0, dtype: object

重置索引

>>> df = dataset.reset_index()
>>> df.head()
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

删除列

# 删除資料
>>> new_df = df.drop(['Date'], axis=1)
>>> new_df.head()
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

添加列

# 添加日期
>>> new_column = df['Date']
>>> new_df['Date'] = new_column
>>> new_df.head()
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

移動列

# 将 Date 移動至第一列
>>> cols = list(new_df)
>>> cols.insert(0, cols.pop(cols.index('Date')))
>>> cols
['Date', 'Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume', 'ewm']

# loc是DataFrame有索引标記的值的
>>> new_df = new_df.loc[:, cols]
>>> new_df.head()
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

删除列

>>> del new_df['Close']
>>> new_df.head()
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

重命名列

  • 重命名
>>> new_df = new_df.rename(index=str,  
                           columns={'Adj Close':'Close'})
>>> new_df.head()
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備
  • 列名改為大寫
>>> new_df.rename(str.upper, axis='columns')
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備
  • 列名改為小寫
# column name to lower case
new_df.rename(str.lower, axis='columns')
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

選擇多個列

>>> new_df[new_df.columns[1:5]]
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

選擇多個行

>>> new_df[1:4]
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

建立Dataframe

>>> stock_df = pd.DataFrame([[123.50, 145.35, 165.50],   
                             [152.35, 154.67, 160.35],   
                             [201.25, 236.54, 254.69]], 
                            columns=['IBM', 'Apple', 'Tesla'])
>>> stock_df
           

複制

IBM Apple Tesla
123.50 145.35 165.50
1 152.35 154.67 160.35
2 201.25 236.54 254.69

替換資料

>>> stock_df = stock_df.replace([201.25, 145.35], [888, 888])
>>> stock_df
           

複制

IBM Apple Tesla
123.50 888.00 165.50
1 152.35 154.67 160.35
2 888.00 236.54 254.69
>>> stock_df = stock_df.replace([165.50, 160.35], ['NaN', 'NaN'])
>>> stock_df
           

複制

IBM Apple Tesla
123.5 888 NaN
1 152.35 154.67 NaN
2 888 236.54 254.69

擷取資料框資料

>>> for index, row in stock_df.iterrows() :
...     print(row['IBM'], row['Apple'])
123.5 888.0
152.35 154.67
888.0 236.54
           

複制

當然,前面這篇pandas/numpy高效資料處理方法總結裡列舉了很多實用方法,大家可随時檢視。

NumPy

NumPy是專為簡化Python中的數組運算而設計的,每個NumPy數組都具有以下屬性:

  • ndim:維數。
  • shape:每一維的大小。
  • size:數組中元素的總數。
  • dtype:數組的資料類型(例如int、float、string等)。
# Numpy 子產品
>>> import numpy as np
           

複制

将資料集轉換為numpy

# 将打開的DataFrame轉換為numpy數組
>>> Open_array = np.array(dataset['Open'])
>>> Open_array  
array([19.59000015, 19.12999916, 19.09000015, ..., 79.44000244,
       79.19000244, 78.56999969])
           

複制

檢視單個元素

>>> print("First element:", Open_array [0])
>>> print("Second element:", Open_array [1])
>>> print("Second last element:", Open_array[-1])
First element: 19.59000015258789
Second element: 19.1299991607666
Second last element: 78.56999969482422
           

複制

檢視多個元素

>>> print(Open_array[2:5]) # 第3個到第5個 
[19.09000015 18.63999939 18.04999924]  

>>> print(Open_array[:-5]) # 從開始到最後第4個  
[19.59000015 19.12999916 19.09000015 ... 80.69999695 81.90000153
 81.65000153]  

>>> print(Open_array[5:])  # 第6個到最後
[18.32999992 17.76000023 17.64999962 ... 79.44000244 79.19000244
 78.56999969]  

>>> print(Open_array[:])   # 開始到最後  
[19.59000015 19.12999916 19.09000015 ... 79.44000244 79.19000244
 78.56999969]
           

複制

修改元素

  • 改變第一個元素
>>> volume = np.array(dataset['Volume'])

>>> volume[0] = 0    
>>> print(volume)  
[      0  469100  170300 ... 5923100 3468900 1715900]
           

複制

  • 改變多個元素
# 更改第3到5個元素
>>> volume[2:5] = np.array([4, 6, 8])   
>>> print(volume)      
[      0  469100       4 ... 5923100 3468900 1715900]
           

複制

增加元素

>>> add_numbers = np.array([1, 2, 3])
>>> np.concatenate((volume, add_numbers)
array([     0, 469100,      4, ...,      1,      2,      3], dtype=int64)
>>> np.append(volume, add_numbers, axis=0)
array([     0, 469100,      4, ...,      1,      2,      3], dtype=int64)
           

複制

删除元素

  • 直接删除
>>> print(volume)
[    0  469100     4 ... 5923100 3468900 1715900]
>>> np.delete(volume, 1) 
array([    0,     4,     6, ..., 5923100, 3468900, 1715900], dtype=int64)
           

複制

  • 轉換為list()來使用remove
>>> volume = volume.tolist() # Convert tolist() to use remove
>>> volume
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備
>>> volume.remove(0)
>>> print(volume)
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備
>>> print(volume.pop(2))
>>> print(volume)
           

複制

超級攻略!Pandas\NumPy\Matrix用于金融資料準備

Matrix

在數學中,矩陣(Matrix)是一個按照長方陣列排列的複數或實數集合。由

m × n

個數

aij

排成的

m行n列

的數表稱為

m行n列

的矩陣,簡稱

m × n

矩陣。矩陣運算在科學計算中非常重要,而矩陣的基本運算包括矩陣的加法,減法,數乘,轉置,共轭和共轭轉置 。

>>> import numpy as np # 對于矩陣和線性代數
>>> import numpy.matlib
           

複制

報錯提示:

這裡用到

Matrix

時,需要将含有

Matrix

的子包

matlib

導入,不然會報錯。

module 'numpy' has no attribute 'matlib'

這是因為numpy。matlib是numpy的可選子包,必須單獨導入。如果您隻導入numpy而不導入子包matlib,那麼Python将把matlib作為numpy包的屬性來查找。如果沒有導入numpy.matlib,這個屬性沒有被配置設定給numpy。
>>> import yfinance as yf
>>> symbol = 'TCEHY'
>>> start = '2021-03-20'
>>> end = '2021-03-31'
>>> yf.pdr_override()
>>> dataset = yf.download(symbol,start,end)
>>> df = dataset.drop(['High', 'Low', 'Close', 'Volume'], axis=1)
>>> df.head()
           

複制

Open Adj Close
Date
2021-03-19 80.699997 82.639999
2021-03-22 81.900002 82.769997
2021-03-23 81.650002 80.930000
2021-03-24 80.930000 76.809998
2021-03-25 77.309998 77.419998

轉換為矩陣

>>> A = np.matrix(df)
>>> A
matrix([[80.69999695, 82.63999939],
       [81.90000153, 82.76999664],
       [81.65000153, 80.93000031],
       [80.93000031, 76.80999756],
       [77.30999756, 77.41999817],
       [79.44000244, 80.98000336],
       [79.19000244, 78.69000244],
       [78.56999969, 78.83000183]])
           

複制

因為

matrix

很多操作不友善,如添加修改某個元素。這裡可以先用

array

函數讀寫完畢以後,再用

matrix

函數讓它恢複矩陣類型。

轉換數組

>>> A = np.array(df)
>>> A
array([[80.69999695, 82.63999939],
       [81.90000153, 82.76999664],
       [81.65000153, 80.93000031],
       [80.93000031, 76.80999756],
       [77.30999756, 77.41999817],
       [79.44000244, 80.98000336],
       [79.19000244, 78.69000244],
       [78.56999969, 78.83000183]])
           

複制

通路元素

>>> type(A)
numpy.ndarray

>>> print("A =", A)
A = [[80.69999695 82.63999939]
 [81.90000153 82.76999664]
 [81.65000153 80.93000031]
 [80.93000031 76.80999756]
 [77.30999756 77.41999817]
 [79.44000244 80.98000336]
 [79.19000244 78.69000244]
 [78.56999969 78.83000183]]

>>> print("A[1] =", A[1])      # 第2行
A[1] = [81.90000153 82.76999664]

>>> print("A[1][2] =", A[1][1])   # 第2行的第2個元素
A[1][2] = 82.7699966430664

>>> print("A[0][-1] =", A[0][-1])  # 第1行的最後第1個元素A[0][-1] = 82.63999938964844
           

複制

取出元素放到清單中

>>> column = [];        # 空清單
>>> for row in A:
...     column.append(row[1]) 

>>> print("Second column =", column)
Second column = [82.63999938964844, 82.7699966430664, 80.93000030517578, 76.80999755859375,   
                 77.41999816894531, 80.9800033569336,8.69000244140625, 78.83000183105469]
           

複制

arange and shape

>>> A = np.arange(4)
>>> print('A =', A)
A = [0 1 2 3]
>>> B = np.arange(12).reshape(2, 6)
>>> print('B =', B)
B = [[ 0  1  2  3  4  5]
     [ 6  7  8  9 10 11]]
           

複制

矩陣的運算

>>> A = np.array(dataset['High'], dataset['Low'])
>>> B = np.array(dataset['Open'], dataset['Close'])
>>> print(A)
array([82.63999939, 82.84999847, 81.94000244, 81.16000366,   
       78.19000244, 80.98000336, 79.80000305, 79.41000366])
           

複制

  • 矩陣加法
>>> C = A + B
>>> print("矩陣加法: \n", C)

矩陣加法: 
[163.33999634 164.75     163.59000397 162.09000397   
155.5 160.4200058  158.99000549 157.98000336]
           

複制

  • 矩陣減法
>>> D = A - B
>>> print("矩陣減法: \n", D)

矩陣減法: 
 [1.94000244 0.94999695 0.29000092 0.23000336  
  0.88000488 1.54000092 0.61000061 0.84000397]
           

複制

  • 兩個矩陣的乘法
>>> E = A.dot(B)
>>> print("兩矩陣點乘: \n", E)
兩矩陣點乘: 
 51749.67010773317
           

複制

  • 矩陣轉置
>>> T = A.transpose()
>>> print("矩陣轉置: \n", T)

矩陣轉置: 
 [82.63999939 82.84999847 81.94000244 81.16000366   
  78.19000244 80.98000336 79.80000305 79.41000366]
           

複制

通路矩陣元素、行和列

  • 通路一維矩陣單個元素
# 第一個元素 
>>> print("A[0] =", A[0])
A[0] = 82.63999938964844

# 第三個元素
>>> print("A[2] =", A[2])
A[2] = 81.94000244140625

# 最後一個元素 
>>> print("A[-1] =", A[-1])  
A[-1] = 79.41000366210938
           

複制

  • 通路多元矩陣單個元素
>>> A = np.array(dataset[['Open', 'Low', 'High', 'Close']])
>>> print("矩陣A: \n", A)
矩陣A: 
 [[80.69999695 80.09999847 82.63999939 82.63999939]
 [81.90000153 81.62999725 82.84999847 82.76999664]
 [81.65000153 80.91000366 81.94000244 80.93000031]
 [80.93000031 76.59999847 81.16000366 76.80999756]
 [77.30999756 76.80000305 78.19000244 77.41999817]
 [79.44000244 77.81999969 80.98000336 80.98000336]
 [79.19000244 78.06999969 79.80000305 78.69000244]
 [78.56999969 78.02999878 79.41000366 78.83000183]]

# 第一行的第一個元素
>>> print("A[0][0] =", A[0][0])  
A[0][0] = 80.69999694824219

# 第二行的第三個元素
>>> print("A[1][2] =", A[1][2])
A[1][2] = 82.8499984741211

# 最後一行的最後一個元素
>>> print("A[-1][-1] =", A[-1][-1])
A[-1][-1] = 78.83000183105469
           

複制

  • 通路矩陣的行
# 第一行
>>> print("A[0] =", A[0])
A[0] = [80.69999695 80.09999847 82.63999939 82.63999939]

# 第三行
>>> print("A[2] =", A[2]) 
A[2] = [81.65000153 80.91000366 81.94000244 80.93000031]

# 最後一行
>>> print("A[-1] =", A[-1]) 
A[-1] = [78.56999969 78.02999878 79.41000366 78.83000183]
           

複制

  • 通路矩陣的列
# 第一列
>>> print("A[:,0] =",A[:,0])
A[:,0] = [80.69999695 81.90000153 81.65000153 80.93000031 77.30999756 79.44000244 79.19000244 78.56999969]

# 第四列
>>> print("A[:,3] =", A[:,3]) 
A[:,3] = [82.63999939 82.76999664 80.93000031 76.80999756 77.41999817 80.98000336 78.69000244 78.83000183]

# 最後一列
>>> print("A[:,-1] =", A[:,-1]) 
A[:,-1] = [82.63999939 82.76999664 80.93000031 76.80999756 77.41999817 80.98000336 78.69000244 78.83000183]
           

複制

  • 通路多元矩陣多個元素
# 沒有逗号相隔,預設擷取行
# 第3到第5個元素
>>> print(A[2:5])    
[[81.65000153 80.91000366 81.94000244 80.93000031]
 [80.93000031 76.59999847 81.16000366 76.80999756]
 [77.30999756 76.80000305 78.19000244 77.41999817]]

# 第1到第3個元素
>>> print(A[:-5])
[[80.69999695 80.09999847 82.63999939 82.63999939]
 [81.90000153 81.62999725 82.84999847 82.76999664]
 [81.65000153 80.91000366 81.94000244 80.93000031]]

# 第6行到最後一個元素
>>> print(A[5:])  
[[79.44000244 77.81999969 80.98000336 80.98000336]
 [79.19000244 78.06999969 79.80000305 78.69000244]
 [78.56999969 78.02999878 79.41000366 78.83000183]]

# 第1個到最後一個元素
>>> print(A[:]) 

[[80.69999695 80.09999847 82.63999939 82.63999939]
 [81.90000153 81.62999725 82.84999847 82.76999664]
 [81.65000153 80.91000366 81.94000244 80.93000031]
 [80.93000031 76.59999847 81.16000366 76.80999756]
 [77.30999756 76.80000305 78.19000244 77.41999817]
 [79.44000244 77.81999969 80.98000336 80.98000336]
 [79.19000244 78.06999969 79.80000305 78.69000244]
 [78.56999969 78.02999878 79.41000366 78.83000183]]

# 反轉一個清單
>>> print(A[::-1]) 
[[78.56999969 78.02999878 79.41000366 78.83000183]
 [79.19000244 78.06999969 79.80000305 78.69000244]
 [79.44000244 77.81999969 80.98000336 80.98000336]
 [77.30999756 76.80000305 78.19000244 77.41999817]
 [80.93000031 76.59999847 81.16000366 76.80999756]
 [81.65000153 80.91000366 81.94000244 80.93000031]
 [81.90000153 81.62999725 82.84999847 82.76999664]
 [80.69999695 80.09999847 82.63999939 82.63999939]]

# 前2行,前4列
>>> print(A[:2, :4]) 
[[80.69999695 80.09999847 82.63999939 82.63999939]
 [81.90000153 81.62999725 82.84999847 82.76999664]]

# 前1行,所有列
>>> print(A[:1,])  
[[80.69999695 80.09999847 82.63999939 82.63999939]]

# 所有行,第3列
>>> print(A[:,2])  
[82.63999939 82.84999847 81.94000244 81.16000366 78.19000244 80.98000336 79.80000305 79.41000366]

# 所有行,第3到5列
>>> print(A[:, 2:5])  # 共4列,隻能取到第3和第4列
[[82.63999939 82.63999939]
 [82.84999847 82.76999664]
 [81.94000244 80.93000031]
 [81.16000366 76.80999756]
 [78.19000244 77.41999817]
 [80.98000336 80.98000336]
 [79.80000305 78.69000244]
 [79.41000366 78.83000183]]
           

複制