生成的類型是ndarray類型python
t1 = np.array([1,2,3,4,5]) print(t1,type(t1)) # 類型爲ndarray t2 = np.array(range(10)) print(t2) t3 = np.arange(10) # 至關於array+range print(t3,t3.dtype) # dtype 能夠查看數組內的數據類型 t4 = np.arange(10,dtype="f2") # 制定數據類型 print(t4.dtype) t5 = np.array([random.random() for i in range(10)]) # 10個小數 print(t5) t6 = np.round(t5,2) # 取小數後兩位 print(t6)
[1 2 3 4 5] <class 'numpy.ndarray'> [0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7 8 9] int32 float16 [0.71127883 0.16178949 0.57974356 0.92394061 0.29455775 0.44950361 0.30519271 0.23295048 0.24572958 0.85217598] [0.71 0.16 0.58 0.92 0.29 0.45 0.31 0.23 0.25 0.85]
numpy常見的數據類型數組
一維數組dom
a1 = np.arange(12) print(a1) a1.shape [ 0 1 2 3 4 5 6 7 8 9 10 11]
二維數組函數
a2 = np.array([[1,2,3],[4,5,6]]) print(a2) a2.shape [[1 2 3] [4 5 6]]
三維數組spa
a3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) print(a3) a3.shape [[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [10 11 12]]]
b1 = np.arange(12) b1.reshape(3,4) # 將原數組形狀變成3行4列的二維數組 array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
b2 = np.arange(24).reshape((2,3,4)) # 2表示塊兒數 (3,4)表示每一塊的形狀 print(b2) b2.reshape(4,6) # 將b2變形爲4行6列的2維數組 reshape是有返回值的 不會改變b2原來的數據 # 將b2變形爲1維數的兩種方式 b2.flatten() b2.reshape((24,)) [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23])
數組和數字進行計算(廣播機制)code
c1 = np.arange(12) print(c1) # (廣播機制) 當咱們把數組與數字進行計算的時候 它會把計算的過程應用到數組的每個數字 而後分別計算 c1+2 [ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] c1*2 [ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22] c1/2 [0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5] c1/0 [nan, inf, inf, inf, inf, inf, inf, inf, inf, inf, inf, inf]
數組與數組之間的計算(形狀相同)blog
c2 = np.arange(24) c3 = np.arange(100,124) print(c2,c3) # 當數組中的數據長度相同時 # 兩個數組中的數據一一對應進行計算 c2+c3 [100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146] c2*c3 [ 0, 101, 204, 309, 416, 525, 636, 749, 864, 981, 1100, 1221, 1344, 1469, 1596, 1725, 1856, 1989, 2124, 2261, 2400, 2541, 3 2684, 2829] c2/c3 [0. , 0.00990099, 0.01960784, 0.02912621, 0.03846154, 0.04761905, 0.05660377, 0.06542056, 0.07407407, 0.08256881, 0.09090909, 0.0990991 , 0.10714286, 0.11504425, 0.12280702, 0.13043478, 0.13793103, 0.14529915, 0.15254237, 0.15966387, 0.16666667, 0.17355372, 0.18032787, 0.18699187]
數組和形狀不同的數組進行計算索引
# 當他們在某一維度形狀同樣時是能夠進行計算的 n1 = np.arange(12).reshape((4,3)) n2 = np.arange(4).reshape((4,1)) print(n1) print(n2) n1+n2 # n1與n2行數相同 array([[ 0, 1, 2], [ 4, 5, 6], [ 8, 9, 10], [12, 13, 14]])
總結:ip
兩個不一樣形狀的數組 只要在某一維度相同就是能夠計算的
- 若是全部維度都不相同 是不能夠計算的class
s1 = np.arange(24).reshape(4,6) print(s1) [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23]]
方法一
np.loadtxt(frame,unpack=True) # loadtxt中的unpack設置爲True也是能夠將從文件讀取出來的數據進行行列轉換的
方法二
s1.transpose()
方法三
s1.T
方法四
# 0表明x軸,1表明y軸 s1.swapaxes(1,0) # 交換軸
z1 = np.arange(24).reshape(4,6) [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23]]
行操做
# 取行 print(z1[2]) # 中括號就是取行 # 連續取多行 print(z1[[1,2]]) print(z1[1:]) # 取不連續多行 print(z1[[1,3]])
列操做
# 取列 print(z1[:,1]) # 取連續多列 print(z1[:,3:]) # 取不連續多列 print(z1[:,[1,3,5]])
取行和列
# 取行和列的值 取第3行4列的值 這裏注意咱們在取值時用的都是索引,行和列都是從0開始, 而咱們正常都是從1開始數行和列的 print(z1[2,3]) z2 = np.arange(100).reshape(10,10) print(z2) # 取多行和多列 取第3行到第6行 第2列到第5列的結果 print(z2[2:6,1:5]) # 取得是行和列交叉點得位置 # 取多個不相鄰得值 # print(z2[[1,2],[2,4]]) # 分別取第2行的第3列 和 第3行的第5列的值 選出來的點就是(1,2) (2,4) print(z2[[6,7,8],[6,7,8]]) # 選出來的點是(6,6) (7,7) (8,8)
# 取到值後從新賦值便可 res = np.arange(12).reshape(3,4) # 將6修改成100 res[1,2]=100 print(res) # 修改多個值 res[1:2]=[3,3,3,4] print(res)
[[ 0 1 2 3] [ 4 5 100 7] [ 8 9 10 11]] [[ 0 1 2 3] [ 3 3 3 4] [ 8 9 10 11]]
根據範圍取值
ret = np.arange(100).reshape(10,10) print(ret) # 根據範圍取值 ret[ret<50] = 666 print(ret) [[ 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 27 28 29] [30 31 32 33 34 35 36 37 38 39] [40 41 42 43 44 45 46 47 48 49] [50 51 52 53 54 55 56 57 58 59] [60 61 62 63 64 65 66 67 68 69] [70 71 72 73 74 75 76 77 78 79] [80 81 82 83 84 85 86 87 88 89] [90 91 92 93 94 95 96 97 98 99]] [[666 666 666 666 666 666 666 666 666 666] [666 666 666 666 666 666 666 666 666 666] [666 666 666 666 666 666 666 666 666 666] [666 666 666 666 666 666 666 666 666 666] [666 666 666 666 666 666 666 666 666 666] [ 50 51 52 53 54 55 56 57 58 59] [ 60 61 62 63 64 65 66 67 68 69] [ 70 71 72 73 74 75 76 77 78 79] [ 80 81 82 83 84 85 86 87 88 89] [ 90 91 92 93 94 95 96 97 98 99]]
tt = np.arange(100).reshape(10,10) np.where(tt<50,0,1) # 全部小於50的替換成0,大於50的替換成1 array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
w = np.arange(100).reshape(10,10) w.clip(50,60) # 將小於50的替換成50,大於60的替換成60 array([[50, 50, 50, 50, 50, 50, 50, 50, 50, 50], [50, 50, 50, 50, 50, 50, 50, 50, 50, 50], [50, 50, 50, 50, 50, 50, 50, 50, 50, 50], [50, 50, 50, 50, 50, 50, 50, 50, 50, 50], [50, 50, 50, 50, 50, 50, 50, 50, 50, 50], [50, 51, 52, 53, 54, 55, 56, 57, 58, 59], [60, 60, 60, 60, 60, 60, 60, 60, 60, 60], [60, 60, 60, 60, 60, 60, 60, 60, 60, 60], [60, 60, 60, 60, 60, 60, 60, 60, 60, 60], [60, 60, 60, 60, 60, 60, 60, 60, 60, 60]])
nan注意點
axis=0 取的是列上的每一行數據
axis=1 取得是行上得每一列數據
什麼是中值?
[1,2,3,4,5] # 中值爲3 [1,2,3,4,5,6] # 中值爲 (3+4)/2 = 3.5