目錄
NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。NumPy 通常與 SciPy(Scientific Python)和 Matplotlib(繪圖庫)一起使用, 這種組合廣泛用於替代 MatLab,是一個強大的科學計算環境,有助於我們通過 Python 學習數據科學或者機器學習。
NumPy的對象-ndarray
NumPy 最重要的一個特點是其 N 維數組對象 ndarray,它是一系列同類型數據的集合,以 0 下標爲開始進行集合中元素的索引。 ndarray 對象是用於存放同類型元素的多維數組(矩陣)。 ndarray 中的每個元素在內存中都有相同存儲大小的區域。
ndarray 內部由以下內容組成:
- 一個指向數據(內存或內存映射文件中的一塊數據)的指針。
- 數據類型或 dtype,描述在數組中的固定大小值的格子。
- 一個表示數組形狀(shape)的元組,表示各維度大小的元組。
- 一個跨度元組(stride),其中的整數指的是爲了前進到當前維度下一個元素需要"跨過"的字節數。
創建一個numpy對象
創建一個 ndarray 只需調用 NumPy 的 array 函數即可
numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)
參數 | 說明 |
object | 數組或嵌套的數列 |
dtype | 數組元素的數據類型,可選 |
copy | 對象是否需要複製,可選 |
order | 創建數組的樣式,C爲行方向,F爲列方向,A爲任意方向(默認) |
subok | 默認返回一個與基類類型一致的數組 |
ndmin | 指定生成數組的最小維度 |
實例:
numpy 支持的數據類型比 Python 內置的類型要多很多,基本上可以和 C 語言的數據類型對應上,其中部分類型對應爲 Python 內置的類型。常用 NumPy 基本類型如下:
名稱 | 描述 |
bool_ | 布爾型數據類型(True 或者 False) |
int_ | 默認的整數類型(類似於 C 語言中的 long,int32 或 int64) |
intc | 與 C 的 int 類型一樣,一般是 int32 或 int 64 |
intp | 用於索引的整數類型(類似於 C 的 ssize_t,一般情況下仍然是 int32 或 int64) |
int8 | 字節(-128 to 127) |
int16 | 整數(-32768 to 32767) |
int32 | 整數(-2147483648 to 2147483647) |
int64 | 整數(-9223372036854775808 to 9223372036854775807) |
NumPy數組屬性
NumPy 數組的維數稱爲秩(rank),秩就是軸的數量,即數組的維度,一維數組的秩爲 1,二維數組的秩爲 2,以此類推。 在 NumPy中,每一個線性的數組稱爲是一個軸(axis),也就是維度(dimensions)。 很多時候可以聲明 axis。axis=0,表示沿着第 0 軸進行操作,即對每一列進行操作;axis=1,表示沿着第1軸進行操作,即對每一行進行操作。
具體的屬性說明如下表:
屬性 | 說明 |
---|---|
ndarray.ndim | 秩,即軸的數量或維度的數量 |
ndarray.shape | 數組的維度,對於矩陣,n 行 m 列 |
ndarray.size | 數組元素的總個數,相當於 .shape 中 n*m 的值 |
ndarray.dtype | ndarray 對象的元素類型 |
ndarray.itemsize | ndarray 對象中每個元素的大小,以字節爲單位 |
ndarray.flags | ndarray 對象的內存信息 |
ndarray.real | ndarray元素的實部 |
ndarray.imag | ndarray 元素的虛部 |
ndarray.data | 包含實際數組元素的緩衝區,由於一般通過數組的索引獲取元素,所以通常不需要使用這個屬性。 |
實例:
numpy.empty
numpy.empty 方法用來創建一個指定形狀(shape)、數據類型(dtype)且未初始化的數組:
numpy.empty(shape, dtype = float, order = 'C')
參數 | 描述 |
---|---|
shape | 數組形狀 |
dtype | 數據類型,可選 |
order | 有"C"和"F"兩個選項,分別代表,行優先和列優先,在計算機內存中的存儲元素的順序。 |
numpy.ones&&numpy.zeros
創建指定形狀的數組,數組元素以 1 來填充:
numpy.ones(shape, dtype = None, order = 'C')
創建指定大小的數組,數組元素以 0 來填充:
numpy.zeros(shape, dtype = float, order = 'C')
參數 | 描述 |
---|---|
shape | 數組形狀 |
dtype | 數據類型,可選 |
order | 'C' 用於 C 的行數組,或者 'F' 用於 FORTRAN 的列數組 |
實例:
numpy.asarray
numpy.asarray 類似 numpy.array,但 numpy.asarray 參數只有三個,比 numpy.array 少兩個。
numpy.asarray(a, dtype = None, order = None)
參數 | 描述 |
---|---|
a | 任意形式的輸入參數,可以是,列表, 列表的元組, 元組, 元組的元組, 元組的列表,多維數組 |
dtype | 數據類型,可選 |
order | 可選,有"C"和"F"兩個選項,分別代表,行優先和列優先,在計算機內存中的存儲元素的順序 |
numpy.arange
numpy 包中的使用 arange 函數創建數值範圍並返回 ndarray 對象,函數格式如下:
numpy.arange(start, stop, step, dtype)
根據 start 與 stop 指定的範圍以及 step 設定的步長,生成一個 ndarray。
參數 | 描述 |
---|---|
start |
起始值,默認爲0 |
stop |
終止值(不包含) |
step |
步長,默認爲1 |
dtype |
返回ndarray 的數據類型,如果沒有提供,則會使用輸入數據的類型。 |
numpy.linspace
numpy.linspace 函數用於創建一個一維數組,數組是一個等差數列構成的,格式如下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
參數 | 描述 |
---|---|
start |
序列的起始值 |
stop |
序列的終止值,如果endpoint 爲true ,該值包含於數列中 |
num |
要生成的等步長的樣本數量,默認爲50 |
endpoint |
該值爲 true 時,數列中包含stop 值,反之不包含,默認是True。 |
retstep |
如果爲 True 時,生成的數組中會顯示間距,反之不顯示。 |
dtype |
ndarray 的數據類型 |
numpy.logspace
numpy.logspace 函數用於創建一個於等比數列。格式如下:
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
參數 | 描述 |
---|---|
start |
序列的起始值爲:base ** start |
stop |
序列的終止值爲:base ** stop。如果endpoint 爲true ,該值包含於數列中 |
num |
要生成的等步長的樣本數量,默認爲50 |
endpoint |
該值爲 true 時,數列中中包含stop 值,反之不包含,默認是True。 |
base |
對數 log 的底數。 |
dtype |
ndarray 的數據類型 |
實例:
NumPy 運算
加減乘除:add(),subtract(),multiply() 和 divide()。
實例
a = np.arange(9, dtype = np.float_).reshape(3,3)
print ('第一個數組:')
print (a)
print ('第二個數組:')
b = np.array([10,10,10])
print (b)
print ('兩個數組相加:')
print (np.add(a,b))
print ('兩個數組相減:')
print (np.subtract(a,b))
print ('兩個數組相乘:')
print (np.multiply(a,b))
print ('兩個數組相除:')
print (np.divide(a,b))
numpy.amin() 和 numpy.amax()
numpy.amin() 用於計算數組中的元素沿指定軸的最小值。
numpy.amax() 用於計算數組中的元素沿指定軸的最大值。
numpy.median()
numpy.median() 函數用於計算數組 a 中元素的中位數(中值)
numpy.mean()和numpy.average()
numpy.mean() 函數返回數組中元素的算術平均值。
numpy.average() 函數根據在另一個數組中給出的各自的權重計算數組中元素的加權平均值。
numpy.sort()
numpy.sort() 函數返回輸入數組的排序副本。函數格式如下:
numpy.sort(a, axis, kind, order)
- axis: 沿着它排序數組的軸,如果沒有數組會被展開,沿着最後的軸排序, axis=0 按列排序,axis=1 按行排序
- kind: 默認爲'quicksort'(快速排序)
- order: 如果數組包含字段,則是要排序的字段
實例: