-
一、簡介
-
二、安裝
-
三、數組的創建
-
-
3.1 array創建
-
3.2 arange創建
-
3.3 隨機數創建數組
-
-
3.3.1 創建隨機小數
-
3.3.2 創建隨機整數
-
3.3.3 創建標准正態分布數組
-
3.3.4 創建指定期望與方差的正態分布數組
-
-
四、ndarray對象的屬性
-
五、其他形式創建數組
-
-
5.1 zeros創建數組
-
5.2 ones創建數組
-
5.3 empty創建數組
-
5.4 linspace創建等差數組
-
5.5 logspace創建等比數組
-
-
六、數組的切片和索引
-
-
6.1 一維數組的切片和索引
-
6.2 二維數組的切片和索引
-
-
七、數組的復制
-
八、改變數組的維度
-
-
8.1 一維數組修改為多維數組
-
-
8.1.1 reshap方法
-
8.1.2 np.reshape()方法
-
-
8.2 多維數組修改為一維數組
-
-
8.2.1 reshape()方法
-
8.2.2 reshape(-1)方法
-
8.2.3 ravel()函數方法
-
8.2.4 flatten()函數方法
-
-
-
九、數組的拼接
-
-
9.1 水平數組拼接
-
9.2 垂直數組拼接
-
9.3 concatenate數組拼接
-
-
十、數組的分割
-
-
10.1 split()方法分割
-
-
10.1.1 一維數組分割
-
10.1.2 二維數組分割
-
-
10.2 hsplite()方法水平分割
-
10.3 vsplite()方法垂直分割
-
-
十一、數組的轉置
-
十二、函數
-
-
12.1算數函數
-
-
12.1.1 加法運算
-
12.1.2 減法運算
-
12.1.3 乘法運算
-
12.1.4 除法運算
-
12.1.5 out參數的使用
-
12.1.6 sin()函數使用
-
12.1.7 四舍五入
-
12.1.8 向上取值函數
-
12.1.9 向下取值函數
-
-
12.2聚合函數
-
-
12.2.1 部分聚合函數
-
12.2.2 部分聚合函數示例
-
-
12.2.2.1 power()函數示例
-
12.2.2.2 median()函數示例
-
12.2.2.3 mean()函數示例
-
-
-
-
一、簡介
Numpy是科學計算基礎庫,提高大量科學計算的功能,比如數據統計,隨機數生成等,其提供最核心類型為多維數組類型(ndarray),支持大量的維度數組與矩陣運算,Numpy支持向量處理ndarry對象,提高程序的運算速度。
二、安裝
-
pip install numpy
三、數組的創建
3.1 array創建
array函數參數為:array(p_object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0) ,下面只介紹常用參數類型。 1、p_object:數組對象 2、dtype:指定轉換的數據中的數據類型 3、ndmin:指定維度數
-
一維數組創建 一維數組的創建只需傳入一個列表即可,輸出的類型為numpy.ndarray類型 示例代碼:
import numpy as np
# 使用array函數創建一維數組
x = np.array([1, 2, 3, 4])
print(x) # [1 2 3 4]
print(type(x)) # <class 'numpy.ndarray'>
-
二維數組創建 同一維數組一樣,同樣傳入列表即可。 注意:傳入的列表最外層還有一層中括號,如果不加則會報錯。 示例代碼:
import numpy as np
# 使用array函數創建二維數組
y = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 創建二維數組
print(y)
輸出結果:
[[1 2 3]
[4 5 6]
[7 8 9]]
print(type(x)) # <class 'numpy.ndarray'>
-
三維數組創建 三位數組同二維一樣,只不過在最外層又加上了一層中括號。 示例代碼:
import numpy as np
# 使用array函數創建三維數組
z = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]) # 創建三維數組
print(z)
輸出結果:
[[[1 2 3]
[4 5 6]
[7 8 9]]]
-
數組中dtype()的使用。 dtype可以將創建的數組轉換為其他類型。 注意:轉換的只是列表中的數據類型,並不是numpy.ndarray類型。 示例代碼:
import numpy as np
# dtype的使用,轉換類型
w = np.array([1, 2, 3], dtype=float) # 將列表中的數據轉換為浮點型,還可以轉換為字符串類型
print(w) #[1. 2. 3.],列表中的數據轉換為浮點型
print(type(w)) #<class 'numpy.ndarray'>,返回的類型仍然是ndarray類型
-
ndmin的使用,指定維度數 ndmin可以指定數組的維度數,單個列表也可以創建出三位數組。但指定的高維數組轉換不了低維數組。 示例代碼:一維數組通過ndmin轉換為三維數組
import numpy as np
# ndmin的使用,指定維度數
a = np.array([1, 2, 3], dtype=float, ndmin=3)
print(a) # [[[1. 2. 3.]]]轉換為三維數據
print(type(a)) # <class 'numpy.ndarray'>
示例代碼:三位數組使用ndmin轉換不了低維數組
# ndmin的使用,指定維度數
a = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]], dtype=float, ndmin=1) # 指定的數組為三維,ndmin為1,輸出結果還是三維
print(a)
輸出結果:
[[[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]]
3.2 arange創建
arange函數的參數:arange([start,] stop[, step,], dtype=None) 1、start:起始值 2、stop:終止值 3、step:步長,默認為1 4、dtype:轉換類型,如果不指定,則會使用數據類型 示例代碼:
import numpy as np
# 創建1-10的數組
a = np.arange(0, 10, dtype=int)
print(a)
輸出結果:
[0 1 2 3 4 5 6 7 8 9]
設置步長代碼:
import numpy as np
# 創建1-10的數組
a = np.arange(0, 10, 2, dtype=int) # 設置步長為2的數組
print(a)
輸出結果:
[0 2 4 6 8]
3.3 隨機數創建數組
3.3.1 創建隨機小數
隨機數創建數組采用的是numpy庫里面的random()函數。 語法:np.random.random(size=None) 返回的是0.0-1.0之間的隨機數,但不包括1.0,size指定隨機數的個數。 創建一維數組示例代碼:
import numpy as np # 生成0-1之間的隨機數組,共10個數據 a = np.random.random(10) print(a) 輸出結果: [0.10646094 0.55262119 0.1376072 0.09820666 0.25679125 0.75362808 0.92731829 0.7927795 0.69050268 0.1210358 ]
創建二維數組時傳入的size參數,指定的是數組的行和列 創建二維數組示例代碼:
import numpy as np # 創建二維隨機數組 b = np.random.random(size=(2, 3)) # 創建2行3列的隨機數組 print(b) 輸出結果: [[0.37721388 0.37544322 0.21520047] [0.53715603 0.30601605 0.06256915]]
創建三維數組時傳入的size參數為三個。 創建三位數組示例代碼:
import numpy as np # 創建三維隨機數組 c = np.random.random(size=(2, 3, 4)) # 創建2個三行四列的數組 print(c) 輸出結果: [[[0.36208984 0.81947471 0.14298442 0.79046203] [0.54460578 0.24994409 0.46474527 0.32052213] [0.17897466 0.82689056 0.90160973 0.45336997]] [[0.45532895 0.8677309 0.09609607 0.51677404] [0.57373632 0.27907846 0.70424555 0.84253691] [0.57790128 0.20907129 0.49335608 0.87549777]]]
3.3.2 創建隨機整數
創建隨機整數使用的是randint()函數,參數為:randint(low, high=None, size=None, dtype=‘l’) low:最小值 high:最大值 size:指定維度數,一維、二維、三維。 dtype:指定數組類型 創建一維隨機整數示例代碼:
import numpy as np # 生成一維0-5之間的10個隨機整數 a = np.random.randint(0, 5, size=10) # size為10 ,表示創建一維10個隨機整數。 print(a) 輸出結果: [4 1 0 1 2 0 3 1 0 2]
創建二維數組時size的參數為一個元組,指定行和列 創建二維隨機整數示例代碼:
import numpy as np # 創建二維2-8之間的隨機數組 b = np.random.randint(2, 8, size=(2, 3)) print(b) 輸出結果: [[3 6 3] [3 4 4]]
創建三維隨機整數示例代碼:
import numpy as np # 創建三維2-8之間的隨機數組 c = np.random.randint(2, 8, size=(2, 3, 4)) # 創建三維數組 print(c) 輸出結果: [[[6 5 6 4] [2 3 4 5] [5 5 7 5]] [[5 2 2 5] [3 4 5 5] [3 3 6 3]]]
3.3.3 創建標准正態分布數組
創建標准正態分布使用的時randn()方法。 randn(d0, d1, …, dn),返回一個或一組樣本,具有標准正態分布(期望為0,均值為1) dn表示維度數 創建一維標准正態分布示例代碼:
import numpy as np # 創建一維標准正態分布 a = np.random.randn(6) print(a) 輸出結果: [ 0.58850012 -0.88685655 -1.00077417 2.50602404 -0.69627562 1.19382079]
創建二維標准正態分布:
import numpy as np # 創建一維標准正態分布 b = np.random.randn(2, 3) # 指定行和列 print(b) 輸出結果: [[-1.59507936 2.00741908 -0.19886889] [-0.78522123 -0.94702049 0.10118063]]
創建三維標准正態分布:
import numpy as np # 創建一維標准正態分布 c = np.random.randn(2, 3, 4) print(c) 輸出結果: [[[ 2.25392453 -1.03092967 0.62695321 -1.59550922] [ 0.21379353 -1.14740262 1.39019012 0.01449549] [ 1.29115361 0.01583029 -1.53528833 -1.65218213]] [[ 1.36693468 1.27192511 -0.36759254 -0.67529018] [ 0.12840871 -0.40780793 0.3604168 0.88594743] [ 0.57778304 -2.42864619 -0.5829699 -0.29083045]]]
3.3.4 創建指定期望與方差的正態分布數組
創建指定期望與方差時的數組,采用的是normal()函數。 參數為:normal(loc=0.0, scale=1.0, size=None) loc:指定期望 scale:指定方差 size:指定維度 創建默認期望與方差的一維數組示例代碼:
import numpy as np # 創建默認期望與均值的一維數組 a = np.random.normal(size=5) # 默認期望loc=0.0,方差scale=1.0 print(a) 輸出結果: [ 0.68913158 -0.24866231 0.93683785 -0.33245719 1.56009623]
創建指定期望與方差的二維數組示例代碼:
import numpy as np # 創建默認期望與均值的一維數組 a = np.random.normal(loc=2, scale=3, size=(2, 3)) # 指定期望為2,方差為3的二維數組 print(a) 輸出結果: [[ 6.13038568 4.63502362 1.5378486 ] [ 0.47091329 2.1003756 -0.93129833]]
四、ndarray對象的屬性
Numpy最重要的一個特點是其N維數組對象ndarray,它是一系列同類型數據的集合,以0為下標開始進行集合中元素的索引。 ndarray對象是用於存放同類型元素的多維數組,ndarray中的每個元素在內存中都有相同存儲的大小的區域。 ndarray內部由以下內容組成:
-
一個指向數據(內存或內存映射文件中的一塊數據)的指針。
-
數據類型或dtype,描述在數組中固定大小值的格子。
-
一個表示數組形狀(shape)的元組,表示各維度大小的元組。
五、其他形式創建數組
5.1 zeros創建數組
zeros創建語法:zeros(shape, dtype=float, order=‘C’) Return a new array of given shape and type, filled with zeros.返回一個數組,給定形狀和類型,以0填充。 示例代碼: zreos創建一維數組
import numpy as np # zeros函數創建一維列表 a = np.zeros(5) # 默認數據為浮點型,可指定數據類型 print(a) 輸出結果: [0. 0. 0. 0. 0.]
zreos創建二維數組
import numpy as np # zeros函數創建二維列表 b = np.zeros((2, 3), dtype=int) # 默認數據為浮點型,可指定數據類型 print(b) 輸出結果: [[0 0 0] [0 0 0]]
5.2 ones創建數組
ones參數:ones(shape, dtype=None, order=‘C’) Return a new array of given shape and type, filled with ones.返回一個數組,給定形狀和類型,以1填充。 ones繪制一維數組示例代碼:
import numpy as np c = np.ones(5, dtype=int) # 默認數據為浮點型,可指定數據類型 print(c) 輸出結果: [1 1 1 1 1]
ones繪制二維數組示例代碼:
import numpy as np # ones繪制二維數組 d = np.ones((3, 4), dtype=int) # 默認數據為浮點型,可指定數據類型 print(d) 輸出結果: [[1 1 1 1] [1 1 1 1] [1 1 1 1]]
5.3 empty創建數組
empty()方法用來創建一個指定形狀(shape)、數據類型(dtype)且為初始化的數組,里面的元素的值是之前內存的值。 empty語法:empty(shape, dtype=float, order=‘C’) order有C和F兩個選項,分別代表行優先和列優先,在計算機內存中的存儲的順序。 empty創建一維數組實例代碼:
import numpy as np # empty創建一維數組 e = np.empty(5) print(e) 輸出結果: [8.73990362e+245 3.20929408e-220 1.63354242e-301 1.39249620e-309 4.55718212e-303]
empty創建二維數組實例代碼:
import numpy as np # empty創建二維數組 f = np.empty((2, 3), dtype=float) print(f) 輸出結果: [[6.23042070e-307 3.56043053e-307 7.56595733e-307] [8.45590539e-307 6.89807188e-307 9.34604358e-307]]
5.4 linspace創建等差數組
linspace函數用於創建一個一維數組,數組是一個等差數列構成的。 linspace語法:linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None): start:序列的起始值 stop:序列的終止值,如果endpoint=True則包含終止值 num:要生成的等步長樣本的數量,默認為50 endpoint:默認為True,為True時生成的數組包含終止值 restep:如果為True,生成的數組中會顯示間距,反之不顯示 dtype:ndarray的數據類型 linspace創建一維數組示例代碼:
import numpy as np # linspsce創建一維數組 g = np.linspace(1, 10, 12) # 起始值為1,終止值為10,生成12個數據的等差數列數組 print(g) 輸出結果: [ 1. 1.81818182 2.63636364 3.45454545 4.27272727 5.09090909 5.90909091 6.72727273 7.54545455 8.36363636 9.18181818 10. ]
5.5 logspace創建等比數組
logspace語法:logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None): base參數為對數log的底數,其他參數同上。 logspace創建一維數組示例代碼:
import numpy as np # logspac創建等比一維數組 h = np.logspace(1, 10, 10, base=2) print(h) 輸出結果: [ 2. 4. 8. 16. 32. 64. 128. 256. 512. 1024.]
六、數組的切片和索引
ndarray對象的內容可以通過索引或切片來訪問和修改,與python中list的切片操作一樣。 ndarray數組可以基於0-n的下標進行索引,並設置start,stop,step參數進行,從原數組中切割出一個新的數組。
6.1 一維數組的切片和索引
-
索引訪問
import numpy as np a = np.arange(10) # 生成一維數組 # 正序索引訪問 print(a[0], a[2]) 輸出結果0 2 # 負序索引訪問 print(a[-1], a[-3]) 輸出結果9 7
-
切片操作
import numpy as np a = np.arange(10) # 生成一維數組 # 切片操作 print(a[1:-1:2]) #切取第二個元素到最后一個元素且步長為2 輸出結果: [1 3 5 7]
6.2 二維數組的切片和索引
-
索引訪問,訪問行數據 版本一:
import numpy as np b = np.array([[1, 2, 3], [4, 5, 6]]) # 創建一個二維數組 print(b[0]) # 訪問數組第0行 輸出結果: [1 2 3]
版本二:
import numpy as np b = np.arange(1, 13) # 創建一個一維數組 c = b.reshape((4, 3)) # 將一維數組轉換為二維數組 print(c[0]) # 索引第一行 輸出結果: [1 2 3]
索引具體值:
import numpy as np b = np.arange(1, 13) # 創建一個一維數組 c = b.reshape((4, 3)) # 將一維數組轉換為二維數組 print(c[0][2]) # 索引第一行 輸出結果: 3
-
切片操作 切片的使用:[行進行切片,列進行切片] : [start:stop:step,start:stop:step]
切取所有行所有列示例代碼:**
import numpy as np b = np.arange(1, 13) # 創建一個一維數組 c = b.reshape((4, 3)) # 將一維數組轉換為二維數組 print(c[:, :]) # 切取所有行所有列 輸出結果: [[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]
切取所有行部分列示例代碼:
import numpy as np b = np.arange(1, 13) # 創建一個一維數組 c = b.reshape((4, 3)) # 將一維數組轉換為二維數組 print(c[:, 1]) # 切取所有行第二列 輸出結果: [ 2 5 8 11]
切取部分行所有列示例代碼:
b = np.arange(1, 13) # 創建一個一維數組 c = b.reshape((4, 3)) # 將一維數組轉換為二維數組 print(c[0:2, :]) # 切取前兩行所有列 輸出結果: [[1 2 3] [4 5 6]]
切取部分行部分列示例代碼:
import numpy as np b = np.arange(1, 13) # 創建一個一維數組 c = b.reshape((4, 3)) # 將一維數組轉換為二維數組 print(c[0:2, 0:2]) # 切取兩行兩列 輸出結果: [[1 2] [4 5]]
坐標獲取具體值:[行,列] 坐標獲取單一值
import numpy as np b = np.arange(1, 13) # 創建一個一維數組 c = b.reshape((4, 3)) # 將一維數組轉換為二維數組 # 坐標獲取 print(c[1, 2]) 輸出結果: 6
坐標同時獲取不同行不同列
import numpy as np b = np.arange(1, 13) # 創建一個一維數組 c = b.reshape((4, 3)) # 將一維數組轉換為二維數組 # 使用坐標獲取多值 print(c[(1, 2), (2, 0)]) # 獲取第二行第三列,第三行第一列 輸出結果: [6 7]
負索引的使用
import numpy as np b = np.arange(1, 13) # 創建一個一維數組 c = b.reshape((4, 3)) # 將一維數組轉換為二維數組 # 負索引的使用 print(c[-1]) 輸出結果: [10 11 12]
行倒序
import numpy as np b = np.arange(1, 13) # 創建一個一維數組 c = b.reshape((4, 3)) # 將一維數組轉換為二維數組 # 行倒序 print(c[::-1]) 輸出結果: [[10 11 12] [ 7 8 9] [ 4 5 6] [ 1 2 3]]
行列倒序
import numpy as np b = np.arange(1, 13) # 創建一個一維數組 c = b.reshape((4, 3)) # 將一維數組轉換為二維數組 # 行列倒序 print(c[::-1,::-1]) 輸出結果: [[12 11 10] [ 9 8 7] [ 6 5 4] [ 3 2 1]]
七、數組的復制
通過切片可以獲取到新數組,即使賦值給新的變量,但還是原來數組的視圖,如果對切片數組中的元素進行修改,則原數組也會改變。如果要復制數組則使用numpy中的copy方法即可 未使用copy方法的示例代碼:
import numpy as np a = np.arange(1, 13).reshape((3, 4)) # 對a數組進行切片處理,獲取第一二行,第一二列 sub_a = a[:2, :2] print(sub_a) 輸出結果: [[1 2] [5 6]] # 對sub_a中的第一行第一列的值進行修改 sub_a[0][0] = 100 # 修改第一行第一列元素的值 print(sub_a) 輸出結果: [[100 2] [ 5 6]] print(a) # 改變切片數組的值,則原數組的數據也發生改變 輸出結果: [[100 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]
使用copy方法的示例代碼:
import numpy as np a = np.arange(1, 13).reshape((3, 4)) #創建一個二維數組 sub_b = np.copy(a[:2, :2]) #切取第一二行,第一二列,同時復制給sub_b sub_b[0][0] = 200 # 修改第一行第一列元素的值 print(sub_b) 輸出結果: [[200 2] [ 5 6]] print(a) # 修改切片數組的值,不改變原數組的值 輸出結果: [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]
八、改變數組的維度
處理數組的一項重要的工作就是改變數組的維度,包含提高數組的維度和降低數組的維度,還包括數組的轉置,Numpy提高的大量API可以很輕松地完成這些數組的操作,下面介紹改變數組維度的方法。
注意:修改數組時,不管修改到幾維,數據的個數應始終相等,否則報錯 示例:
import numpy as np # arange方法創建一個一維數組 a = np.arange(24) # reshape()方法改變數組的維度,裝換為二維,傳入元組也可 b = a.reshape(4, 6) #修改為(2,12),(12,2),(3,8),(8,3)也可,當個數必須相等。
上述代碼中將一維數組修改維二維數組,修改的數組的數據數4*6等於24,與一維數組中的個數相等。三維數組同理。
8.1 一維數組修改為多維數組
8.1.1 reshap方法
一維數組轉換為二維數組 示例代碼:
import numpy as np # # reshape()方法改變數組的維度,裝換為二維,傳入元組也可 a = np.arange(24) # reshape()方法改變數組的維度 b = a.reshape(4, 6) print(b) 輸出結果: [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23]]
一維數組轉換為三維數組 示例代碼:
import numpy as np # arange方法創建一個一維數組 a = np.arange(24) # # 將一維轉換為三維數組 c = a.reshape(2, 3, 4) print(c) 輸出結果: [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]]
8.1.2 np.reshape()方法
語法:reshape(a, newshape, order=‘C’): a:表示要修改的數組 newshape:x修改后的數組形狀,傳入元組類型 一維數組轉換為二維數組示例代碼:
import numpy as np # arange方法創建一個一維數組 a = np.arange(24) # np.reshape()方法 d = np.reshape(a, (4, 6)) print(d) 輸出結果: [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23]]
一維數組轉換為三維數組示例代碼:
import numpy as np # arange方法創建一個一維數組 a = np.arange(24) # np.reshape()方法轉換為三維數組 e = np.reshape(a, (2, 3, 4)) print(e) 輸出結果: [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]]
8.2 多維數組修改為一維數組
8.2.1 reshape()方法
reshape方法不僅可以將一維數組轉換為多維數組,還可以將多維數組轉換為一維數組。 reshape二維數組修改為一維數組示例代碼:
import numpy as np # arange方法創建一個一維數組 a = np.arange(24) # reshape()方法改變數組的維度,裝換為二維,傳入元組也可 b = a.reshape(4, 6) # reshape()方法將二維數組修改為一維數組 f = b.reshape(24) print(f) 輸出結果: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
reshape三維數組修改為一維數組示例代碼:
import numpy as np # arange方法創建一個一維數組 a = np.arange(24) # np.reshape()方法轉換為三維數組 e = np.reshape(a, (2, 3, 4)) # reshape()方法將三維數組修改為一維數組 g = e.reshape(24) print(g) 輸出結果: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
8.2.2 reshape(-1)方法
調用該方法后,不管幾維數組,都轉化為一維數組。 示例代碼:
import numpy as np # arange方法創建一個一維數組 a = np.arange(24) # np.reshape()方法轉換為三維數組 e = np.reshape(a, (2, 3, 4)) # reshape()方法將三維數組修改為一維數組 g = e.reshape(-1) print(g) 輸出結果: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
8.2.3 ravel()函數方法
使用該函數時,直接調用即可,這里舉例三維數組修改為一維數組,二維同理。 示例代碼:
import numpy as np # arange方法創建一個一維數組 a = np.arange(24) # 將一維轉換為三維數組 c = a.reshape(2, 3, 4) # ravel函數修改 h = c.ravel() print(h) 輸出結果: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
8.2.4 flatten()函數方法
使用該函數時,直接調用即可,這里舉例三維數組修改為一維數組,二維同理。 示例代碼:
import numpy as np # arange方法創建一個一維數組 a = np.arange(24) # 將一維轉換為三維數組 c = a.reshape(2, 3, 4) # flatten()函數修改 i = c.flatten() print(i) 輸出結果: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
九、數組的拼接
9.1 水平數組拼接
通過hstack函數可以將兩個或多個數組水平組合起來形成一個新的數組。 語法:hstack(tup): hstack函數接收的參數為元組或者列表形式 示例代碼:
import numpy as np # 創建兩個二維數組 a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([[10, 20, 30], [40, 50, 60]]) # 調用hstack函數,參數為元組類型或着列表類型都可 c = np.hstack((a, b)) print(c) 輸出結果: [[ 1 2 3 10 20 30] [ 4 5 6 40 50 60]]
9.2 垂直數組拼接
通過vstack函數可以將兩個或多個數組垂直組合起來形成一個新的數組。 語法: vstack(tup): vstack函數接收的參數為元組或是列表形式 示例代碼:
import numpy as np # 創建兩個二維數組 a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([[10, 20, 30], [40, 50, 60]]) # 調用vstack函數,實現垂直方向拼接,參數為元組或是列表 d = np.vstack([a, b]) print(d) 輸出結果: [[ 1 2 3] [ 4 5 6] [10 20 30] [40 50 60]]
9.3 concatenate數組拼接
語法:concatenate(arrays, axis=None, out=None) arrays:表示要拼接的數組 axis:拼接軸,默認為0。二維數組時有兩個軸,0代表x軸,1代表y軸。三維數組有三個軸2代表z軸。 out:ndarray,可選,如果提供,則指定放置結果的目的地。形狀必須是正確,如果不匹配,則匹配concatenate返回的值指定了out參數。 axis采用默認值也就是0時的示例代碼:
import numpy as np # 創建兩個二維數組 a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([[10, 20, 30], [40, 50, 60]]) # concatenate的使用,axis默認為0時,相當於vstack e = np.concatenate((a, b), axis=0) print(e) 輸出結果: [[ 1 2 3] [ 4 5 6] [10 20 30] [40 50 60]] # 當axis=0時,shape為x軸的數據的疊加,2+2=4 (4, 3)
axis=1時的示例代碼:
import numpy as np # 創建兩個二維數組 a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([[10, 20, 30], [40, 50, 60]]) # concatenate的使用,axis默認為1時,相當於hstack e = np.concatenate((a, b), axis=1) print(e, e.shape) 輸出結果: [[ 1 2 3 10 20 30] [ 4 5 6 40 50 60]] # 當axis=1時,shape為y軸的數據的疊加,3+3=6 (2, 6)
三維數組axis=2的拼接
import numpy as np # 創建兩個三維數組 f = np.arange(1, 13).reshape(1, 2, 6) g = np.arange(13, 25).reshape(1, 2, 6) # concatenate的使用,axis=2時 h = np.concatenate((f, g), axis=2) print(h, h.shape) 輸出結果: [[[ 1 2 3 4 5 6 13 14 15 16 17 18] [ 7 8 9 10 11 12 19 20 21 22 23 24]]] # 當axis=2時,shape為z軸的數據的疊加,6+6=12 (1, 2, 12)
十、數組的分割
10.1 split()方法分割
語法:split(ary, indices_or_sections, axis=0) ary:被分割的數組 indices_or_sections:如果是一個整數,就用該數平均切分,如果是一個數組,為沿軸切分的位置。 axis:沿着哪個維度進行切向,默認為0,橫向切分。為1時,縱向切分。
10.1.1 一維數組分割
平均分割示例代碼:
import numpy as np # split分割一維數組 x = np.arange(1, 9) # 傳遞整數,采用平均分割 a = np.split(x, 4) print(a) 輸出結果: [array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]
傳遞數組,按位置分割:
import numpy as np # split分割一維數組 x = np.arange(1, 9) # 傳遞數組,按位置分割 b = np.split(x, [3, 5]) #(1,2,3)為一組,(3,4)為一組,(6,7,8)為一組 print(b) 輸出結果: [array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]
10.1.2 二維數組分割
注意:使用平均分割時,數組必須能夠平均分割,如果不能平均分割,則會報錯。 平均分割垂直方向示例代碼:
import numpy as np # 創建一個二維數組 x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 將x按垂直方向平均分割為兩份,且分別接收 a, b = np.split(x, 2, axis=0) print(a) print(b) 輸出結果: [[1 2 3] [4 5 6]] [[ 7 8 9] [10 11 12]]
平均分割水平方向示例代碼:
import numpy as np x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 將x按水平方向平均分割為三份,且分別接收 a, b, c = np.split(x, 3, axis=1) print(a, b, c) 輸出結果: [[ 1] [ 4] [ 7] [10]] [[ 2] [ 5] [ 8] [11]] [[ 3] [ 6] [ 9] [12]]
傳遞數組,垂直方向,按位置分割:
import numpy as np x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 將x按垂直方向按位置分割為三份,且分別接收 c, d, f = np.split(x, [1, 2], axis=0) print(c) print(d) print(f) 輸出結果: [[1 2 3]] [[4 5 6]] [[ 7 8 9] [10 11 12]]
傳遞數組,水平方向,按位置分割:
import numpy as np x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 將x按水平方向按位置分割為三份,且分別接收 g, h, i = np.split(x, [1, 2], axis=1) print(g) print(h) print(i) 輸出結果: [[ 1] [ 4] [ 7] [10]] [[ 2] [ 5] [ 8] [11]] [[ 3] [ 6] [ 9] [12]]
10.2 hsplite()方法水平分割
使用hsplit函數可以水平分割數組,該函數有兩個參數,第一個參數為待分割的數組,第二個參數表示要將數組水平分割成幾個小組。 注意:使用平均分割時,數組必須能夠平均分割,如果不能平均分割,則會報錯。 hsplit()水平方向平均分割示例代碼
import numpy as np x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 使用hsplit()水平方向分割 a, b, c = np.hsplit(x, 3) print(a) print(b) print(c) 輸出結果: [[ 1] [ 4] [ 7] [10]] [[ 2] [ 5] [ 8] [11]] [[ 3] [ 6] [ 9] [12]]
hsplit()水平方向按位置分割示例代碼
import numpy as np x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 使用hsplit()水平方向位置分割 a, b, c = np.hsplit(x, [1, 2]) print(a) print(b) print(c) 輸出結果: [[ 1] [ 4] [ 7] [10]] [[ 2] [ 5] [ 8] [11]] [[ 3] [ 6] [ 9] [12]]
10.3 vsplite()方法垂直分割
注意:使用平均分割時,數組必須能夠平均分割,如果不能平均分割,則會報錯。 vsplit()垂直方向平均分割示例代碼
import numpy as np x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 使用vsplit()垂直方向平均分割 a, b = np.vsplit(x, 2) print(a) print(b) 輸出結果: [[1 2 3] [4 5 6]] [[ 7 8 9] [10 11 12]]
vsplit()垂直方向按位置分割示例代碼
import numpy as np x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 使用vsplit()垂直方向按位置分割 a, b, c = np.vsplit(x, [2, 3]) print(a) print(b) print(c) 輸出結果: [[1 2 3] [4 5 6]] [[7 8 9]] [[10 11 12]]
十一、數組的轉置
調用transpose()方法可以轉置我們的數組。 語法:transpose(a, axes=None) a:要轉置的數組 axes:對於多維數組轉置時需要傳遞這個參數,參數為想要成的維度元組
二維數組的轉置具體代碼如下:
import numpy as np # 創建一個二維數組 x = np.arange(1, 13).reshape((2, 6)) print(x) 輸出結果: [[ 1 2 3 4 5 6] [ 7 8 9 10 11 12]] a = np.transpose(x) print(a) 輸出結果: [[ 1 7] [ 2 8] [ 3 9] [ 4 10] [ 5 11] [ 6 12]]
二維數組.T方法轉置數組 具體代碼如下:
import numpy as np # 創建一個二維數組 x = np.arange(1, 13).reshape((2, 6)) print(x) 輸出結果: [[ 1 2 3 4 5 6] [ 7 8 9 10 11 12]] # .T方法轉置數組 b = x.T print(b) 輸出結果: [[ 1 7] [ 2 8] [ 3 9] [ 4 10] [ 5 11] [ 6 12]]
三維數組的轉置 對於三維數組x[ i ],[ j ] ,[ k ] 進行轉置,默認的將 i 和 k 進行交換 示例代碼:
import numpy as np # 創建一個三維數組 x = np.arange(1, 25).reshape((2, 3, 4)) print(x) 輸出結果: [[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] [[13 14 15 16] [17 18 19 20] [21 22 23 24]]] # 三維數組的轉置 c = np.transpose(x) print(c) 輸出結果: [[[ 1 13] [ 5 17] [ 9 21]] [[ 2 14] [ 6 18] [10 22]] [[ 3 15] [ 7 19] [11 23]] [[ 4 16] [ 8 20] [12 24]]]
指定轉置后維度
import numpy as np # 創建一個三維數組 x = np.arange(1, 25).reshape((2, 3, 4)) print(x) 輸出結果: [[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] [[13 14 15 16] [17 18 19 20] [21 22 23 24]]] # 三維數組的轉置 c = np.transpose(x, (1, 0, 2)) # (1,0,2)表示想要轉置數組的維度,本例為三個兩行四列的數組 print(c) 輸出結果: [[[ 1 2 3 4] [13 14 15 16]] [[ 5 6 7 8] [17 18 19 20]] [[ 9 10 11 12] [21 22 23 24]]]
十二、函數
如果參與運算的兩個對象,都是ndarray,並且形狀相同,那么會對位彼此之間進行加減乘除運算。Numpy算數函數包含簡單的加減乘除:add(),subtract(),multiply()和divide()。
12.1算數函數
12.1.1 加法運算
一維數組運算時,會發生廣播從而完成運算 示例代碼:
import numpy as np # 創建兩個數組 a = np.arange(9, dtype=float).reshape(3, 3) b = np.array([10, 10, 10]) # 加法運算,以下兩種方法均可,輸出的結果相同 print(np.add(a, b)) print(a + b) 輸出結果: [[10. 11. 12.] [13. 14. 15.] [16. 17. 18.]]
12.1.2 減法運算
import numpy as np a = np.arange(9, dtype=float).reshape(3, 3) b = np.array([10, 10, 10]) # 減法運算,以下兩種方法均可,輸出的結果相同 print(np.subtract(a, b)) print(a-b) 輸出結果: [[-10. -9. -8.] [ -7. -6. -5.] [ -4. -3. -2.]]
12.1.3 乘法運算
import numpy as np a = np.arange(9, dtype=float).reshape(3, 3) b = np.array([10, 10, 10]) # 乘法運算,以下兩種方法均可,輸出的結果相同 print(np.multiply(a, b)) print(a*b) 輸出結果: [[ 0. 10. 20.] [30. 40. 50.] [60. 70. 80.]]
12.1.4 除法運算
import numpy as np a = np.arange(9, dtype=float).reshape(3, 3) b = np.array([10, 10, 10]) # 除法運算,以下兩種方法均可,輸出的結果相同 print(np.divide(a, b)) print(a/b) 輸出結果: [[0. 0.1 0.2] [0.3 0.4 0.5] [0.6 0.7 0.8]]
12.1.5 out參數的使用
本示例用乘法示例,其他運算同理。
import numpy as np a = np.arange(9, dtype=float).reshape(3, 3) # out參數的使用 c = np.empty((3, 3)) # 創建一個3行3列的空數組 np.multiply(a, 10, out=c) # 將a*10得到的數組傳輸給c空數組 print(c) 輸出結果: [[ 0. 10. 20.] [30. 40. 50.] [60. 70. 80.]]
12.1.6 sin()函數使用
本例以sin函數示例,其他三角函數同理
import numpy as np # sin函數的使用 a = np.array([0, 30, 45, 60, 90]) # 轉換為弧度 print(np.sin(a)) 輸出結果: [ 0. -0.98803162 0.85090352 -0.30481062 0.89399666]
12.1.7 四舍五入
around()函數提供了四舍五入的方法 語法:numpy.around(a, decimals) a:數組 decimals:舍入的小位數。默認為0,如果為負值,整數將四舍五入到小數點左側的位置。 示例代碼:
import numpy as np # 創建一個數組 a = np.array([10.2, 1.233, 3.55, 6.7845]) # 四舍五入方法 b = np.around(a) print(b) 輸出結果: [10. 1. 4. 7.]
12.1.8 向上取值函數
ceil()函數提供了向上取值的方法。用法同四舍五入方法相同。 示例代碼:
import numpy as np a = np.array([10.2, 1.233, 3.55, 6.7845]) # 向上取值函數 c = np.ceil(a) print(c) 輸出結果: [11. 2. 4. 7.]
12.1.9 向下取值函數
floor()函數提供了向下取值的方法。用法同四舍五入方法相同。 示例代碼:
import numpy as np a = np.array([10.2, 1.233, 3.55, 6.7845]) # 向下取值函數 d = np.floor(a) print(d) 輸出結果: [10. 1. 3. 6.]
12.2聚合函數
12.2.1 部分聚合函數
Numpy提高了很多的聚合函數,以下為部分聚合函數。
12.2.2 部分聚合函數示例
12.2.2.1 power()函數示例
numpy.power()函數將第一個輸入數組中的元素作為底數,計算它與第二個輸入數組中相應元素的冪。 power()函數示例:
import numpy as np # 創建一個二維數組 a = np.arange(12).reshape((3, 4)) print(a) 輸出結果: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] # 將數組中的每一個元素運行冪運算 e = np.power(a, 2) print(e) 輸出結果: [[ 0 1 4 9] [ 16 25 36 49] [ 64 81 100 121]]
12.2.2.2 median()函數示例
median()函數的使用 一維數組的中位數
import numpy as np # 創建一個一維數組 f = np.array([2, 4, 3, 1, 2]) # 對數組排序,數組中的元素為偶數,中位數值:中間兩個數的平均值。如果為奇數,中間的數 # 取中位數 g = np.median(f) print(g) 輸出結果: 2.0
二維數組取中位數示例代碼 二維數組的中位數,要通過axis指定軸
import numpy as np # 創建一個二維數組。二維數組的中位數,要通過axis指定軸 h = np.arange(1, 13).reshape((3, 4)) print(h) 輸出結果: [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] i = np.median(h, axis=0) # axis=0表示垂直方向取中位數 j = np.median(h, axis=1) # axis=1表示水平方向取中位數 print(i) 輸出結果: [5. 6. 7. 8.] print(j) 輸出結果: [ 2.5 6.5 10.5]
12.2.2.3 mean()函數示例
一維數組求平均數
import numpy as np # 創建一個一維數組 f = np.array([2, 4, 3, 1, 2]) # 求一維數組平均數 k = np.mean(f) print(k) 輸出結果: 2.4
二維數組求平均數
import numpy as np # 創建一個二維數組。二維數組的平均數,要通過axis指定軸 h = np.arange(1, 13).reshape((3, 4)) print(h) 輸出結果: [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] # 二維數組求平均數,axis指定軸求平均 l = np.mean(h, axis=0) # 垂直方向求平均數 m = np.mean(h, axis=1) # 水平方向求平均數 print(l) 輸出結果: [5. 6. 7. 8.] print(m) [ 2.5 6.5 10.5]