Numpy 資料型別
bool 用一位儲存的布林型別(值為TRUE或FALSE) inti 由所在平臺決定其精度的整數(一般為int32或int64) int8 整數,範圍為128至127 int16 整數,範圍為32 768至32 767 int32 整數,範圍為231至231 1 int64 整數,範圍為263至263 1 uint8 無符號整數,範圍為0至255 uint16 無符號整數,範圍為0至65 535 uint32 無符號整數,範圍為0至2321 uint64 無符號整數,範圍為0至2641 float16 半精度浮點數(16位):其中用1位表示正負號,5位表示指數,10位表示尾數 float32 單精度浮點數(32位):其中用1位表示正負號,8位表示指數,23位表示尾數 float64或float 雙精度浮點數(64位):其中用1位表示正負號,11位表示指數,52位表示尾數 complex64 複數,分別用兩個32位浮點數表示實部和虛部 complex128或complex 複數,分別用兩個64位浮點數表示實部和虛部
一維陣列的索引和切片
import numpy as np d = np.arange(9) print (d) # [0 1 2 3 4 5 6 7 8] print (d[2:4]) # 獲取2~4 之間的元素 # [2 3] print (d[::-1]) # 負數下標翻轉陣列 # [8 7 6 5 4 3 2 1 0]
# 改變陣列的維度
# reshape 改變陣列維度(重新調整矩陣的行數、列數、維數。)
import numpy as np e = np.arange(9) print (e) # [0 1 2 3 4 5 6 7 8] e1 = e.reshape(3,3) # print (e1) #[[0 1 2] # [3 4 5] # [6 7 8]]
ravel函式完成展平
import numpy as np f = np.arange(24).reshape(2,3,4) 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]]] f1 = f.ravel() print (f1) #[ 0 1 2 ..., 21 22 23]
flatten 這個函式恰如其名,flatten就是展平的意思,與ravel函式的功能相同。不過,flatten函式會請求分配記憶體來儲存結果,而ravel函式只是返回陣列的一個檢視(view)
f2 = f.flatten() print (f2) #[ 0 1 2 ..., 21 22 23]
shape,用元組設定維度
f.shape=(6,4) 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]]
resize,resize和reshape函式的功能一樣,但resize會直接修改所操作的陣列:
f.resize((2,12)) print (f) #[[ 0 1 2 ..., 9 10 11] # [12 13 14 ..., 21 22 23]]
陣列的組合
import numpy as np a = np.arange(9).reshape(3,3) print (a) #[[0 1 2] # [3 4 5] # [6 7 8]] b = 2 * a print (b) #[[ 0 2 4] # [ 6 8 10] # [12 14 16]]
# 1. 水平組合hstack函式
h = np.hstack((a,b)) print (h) #[[ 0 1 2 0 2 4] # [ 3 4 5 6 8 10] # [ 6 7 8 12 14 16]]
# 2. 垂直組合vstack函式
v = np.vstack((a,b)) print (v) #[[ 0 1 2] # [ 3 4 5] # [ 6 7 8] # [ 0 2 4] # [ 6 8 10] # [12 14 16]]
# 3. 深度組合dstack函式(將一系列陣列沿著縱軸(深度)方向進行層疊組合)
d = np.dstack((a,b)) print (d) #[[[ 0 0] # [ 1 2] # [ 2 4]] # # [[ 3 6] # [ 4 8] # [ 5 10]] # # [[ 6 12] # [ 7 14] # [ 8 16]]]
# 4. 列組合,column_stack函式對於一維陣列將按列方向進行組合,對於二維陣列,column_stack與hstack的效果是相同
c = np.arange(5) c1 = 2 * c c2 = np.column_stack((c,c1)) print (c2) #[[0 0] # [1 2] # [2 4] # [3 6] # [4 8]] l = np.column_stack((a,b)) print (l) #[[ 0 1 2 0 2 4] # [ 3 4 5 6 8 10] # [ 6 7 8 12 14 16]]
# 行組合row_stack函式(對於兩個一維陣列,將直接層疊起來組合成一個二維陣列,對於二維陣列,row_stack與vstack的效果是相同的)
c = np.arange(5) c1 = 2 * c c3 = np.row_stack((c,c1)) print (c3) #[[0 1 2 3 4] # [0 2 4 6 8]] r = np.row_stack((a,b)) print (r) #[[ 0 1 2] # [ 3 4 5] # [ 6 7 8] # [ 0 2 4] # [ 6 8 10] # [12 14 16]]
# 分割陣列
A = np.arange(9).reshape(3,3) print (A) #[[0 1 2] # [3 4 5] # [6 7 8]]
# 1. 水平分割 hsplit函式
H = np.hsplit(A,3) print (H) #[array([[0], # [3], # [6]]), array([[1], # [4], # [7]]), array([[2], # [5], # [8]])]
# 呼叫split函式並指定引數axis=1
H1 =np.split(A,3,axis=1) print (H1) #[array([[0], # [3], # [6]]), array([[1], # [4], # [7]]), array([[2], # [5], # [8]])]
# 2. 垂直分割,vsplit函式
V = np.vsplit(a,3) print (V) #[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
# 呼叫split函式並指定引數axis=0
V1 = np.split(A,3,axis=0) print (V1) #[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
# 3. 深度分割,dsplit函式
C = np.arange(27).reshape(3,3,3) 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] # [24 25 26]]] D = np.dsplit(C,3) print (D) #[array([[[ 0], # [ 3], # [ 6]], # # [[ 9], # [12], # [15]], # # [[18], # [21], # [24]]]), array([[[ 1], # [ 4], # [ 7]], # # [[10], # [13], # [16]], # # [[19], # [22], # [25]]]), array([[[ 2], # [ 5], # [ 8]], # # [[11], # [14], # [17]], # # [[20], # [23], # [26]]])]
# 陣列的屬性
num = np.arange(24).reshape(2,12) print (num) #[[ 0 1 2 ..., 9 10 11] # [12 13 14 ..., 21 22 23]]
# 1. ndim屬性,給出陣列的維數,或陣列軸的個數
print (num.ndim) #2
# 2. size屬性,給出陣列元素的總個數
print (num.size) #24
# 3. itemsize屬性,給出陣列中的元素在記憶體中所佔的位元組數
print (num.itemsize) #4
# 4. nbytes屬性,整個陣列所佔的儲存空間(itemsize和size屬性值的乘積)
print (num.nbytes) #96
# 5. T屬性,效果和transpose函式一樣
# 陣列的轉換,tolist函式