Numpy是Python中用於科學計算的核心庫。它提供了一個高性能的多維數組對象,以及處理這些數組的工具。html
numpy數組是由相同類型的值組成的網格,並由一組非負整數進行索引。維數爲數組的秩;數組的形狀是一個整數元組,它給出了數組在每一個維度上的大小。數組
1 import numpy as np 2 3 a = np.array([1, 2, 3]) # 經過列表建立一個一維數組 4 print(type(a)) # 輸出 "<class 'numpy.ndarray'>" 5 print(a.shape) # 輸出 "(3,)" 6 print(a[0], a[1], a[2]) # 輸出 "1 2 3" 7 a[0] = 5 # 改變數組中的一個元素 8 print(a) # 輸出 "[5, 2, 3]" 9 10 b = np.array([[1,2,3],[4,5,6]]) # 經過列表建立一個二維數組 11 print(b.shape) # 輸出 "(2, 3)" 12 print(b[0, 0], b[0, 1], b[1, 0]) # 輸出 "1 2 4"
1 import numpy as np 2 3 a = np.zeros((2,2)) # 建立元素全爲0的數組 4 print(a) # 輸出 "[[ 0. 0.] 5 # [ 0. 0.]]" 6 7 b = np.ones((1,2)) # 建立元素全爲1的數組 8 print(b) # 輸出 "[[ 1. 1.]]" 9 10 c = np.full((2,2), 7) # 建立一個常數數組 11 print(c) # 數組 "[[ 7. 7.] 12 # [ 7. 7.]]" 13 14 d = np.eye(2) # 建立一個2*2的單位矩陣 15 print(d) # 輸出 "[[ 1. 0.] 16 # [ 0. 1.]]" 17 18 e = np.random.random((2,2)) # 建立一個隨機矩陣 19 print(e) # 輸出 "[[ 0.91940167 0.08143941] 20 # [ 0.68744134 0.87236687]]"
使用切片獲得的數組與原來的數組維數相同dom
1 import numpy as np 2 3 a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) 4 5 b = a[:2,1:3] 6 7 print(a[0,1]) #輸出結果爲2 8 b[0,0] = 77 9 print(a[0,1]) #輸出結果爲77
也能夠混合整數索引與切片,但這樣會獲得一個比原來數組維數低的數組ide
1 import numpy as np 2 3 a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) 4 5 row_1 = a[1,:] 6 row_2 = a[1:2,:] 7 print(row_1,row_1.shape) #輸出爲[5,6,7,8] (4,) 8 print(row_2,row_2.shape) #輸出爲[[5,6,7,8]] (1,4) 9 10 col_1 = a[:,1] 11 col_2 = a[:,1:2] 12 print(col_1,col_1.shape) #輸出爲[2,6,10] (3,) 13 print(col_2,col_2.shape) #輸出爲[[2] 14 # [6] 15 # [10]] (3,1)
1 import numpy as np 2 3 a = np.array([[1,2],[3,4],[5,6]]) 4 5 print(a[[0,1,2],[0,1,0]]) #索引數組的0,0 1,1 2,0元素,與下面的索引等價 6 print(np.array([a[0,0],a[1,1],a[2,0]]))
除此以外,整數索引能夠用來實以下功能:對矩陣中的某些特定元素實現計算,如:函數
1 import numpy as np 2 3 a = np.array([[1,2,3],[4,5,6],[7,8,9]]) #[[1,2,3] 4 # [4,5,6] 5 # [7,8,9]] 6 #建立索引 7 b = [0,1,2] 8 9 print(a[np.arange(3),b]) 10 11 #實現數組中特定元素的計算 12 a[np.arange(3),b] += 10 13 print(a) 14 15 #輸出結果爲 16 # [[11 2 3] 17 # [ 4 15 6] 18 # [ 7 8 19]]
一般這類索引用於選取某些符合特定條件的數組元素工具
1 import numpy as np 2 3 a = np.array([[1,2], [3, 4], [5, 6]]) 4 5 bool_idx = (a > 2) # Find the elements of a that are bigger than 2; 6 # this returns a numpy array of Booleans of the same 7 # shape as a, where each slot of bool_idx tells 8 # whether that element of a is > 2. 9 10 print(bool_idx) # Prints "[[False False] 11 # [ True True] 12 # [ True True]]" 13 14 # We use boolean array indexing to construct a rank 1 array 15 # consisting of the elements of a corresponding to the True values 16 # of bool_idx 17 print(a[bool_idx]) # Prints "[3 4 5 6]" 18 19 # We can do all of the above in a single concise statement: 20 print(a[a > 2]) # Prints "[3 4 5 6]"
經過arr.dtype能夠查看數組的數據類型,也能夠在建立數組的時候,經過dtype參數來指定數據的類型,如:性能
1 import numpy as np 2 3 a = np.array([1.,2,3],dtype = np.float32) 4 print(a.dtype)
1 import numpy as np 2 3 x = np.array([[1,2],[3,4]],dtype = np.float64) 4 y = np.array([[5,6],[7,8]],dtype = np.float64) 5 6 #[[6.8 8.0] 7 # [10.0 12.0]] 8 #兩個輸出結果同樣 9 print(x + y) 10 print(np.add(x,y)) 11 12 #[[-4.0 -4.0] 13 # [-4.0 -4.0]] 14 #兩個輸出結果同樣 15 print(x - y) 16 print(np.subtract(x,y)) 17 18 #[[5.0 12.0] 19 # [21.0 32.0]] 20 #兩個輸出結果同樣 21 print(x * y) 22 print(np.multiply(x,y)) 23 24 #[[0.2 0.33333333] 25 # [0.42857143 0.5]] 26 #兩個輸出結果同樣 27 print(x / y) 28 print(np.divide(x,y)) 29 30 #[[1. 1.41421356] 31 # [1.73205081 2.]] 32 print(np.sqrt(x))
1 import numpy as np 2 3 x = np.array([[1,2],[3,4]]) 4 y = np.array([[5,6],[7,8]]) 5 6 v = np.array([9,10]) 7 w = np.array([11,12]) 8 9 #向量的內積 10 #輸出結果均爲219 11 print(v.dot(w)) 12 print(np.dot(v,w)) 13 14 #矩陣與向量的成乘積 15 #輸出結果均爲[29 67] 16 print(x.dot(v)) 17 print(np.dot(x,v)) 18 19 #矩陣的內積 20 #輸出結果爲[[19 22] 21 # [43 50]] 22 print(x.dot(y)) 23 print(np.dot(x,y))
下面是一些數組計算的函數this
1 import numpy as np 2 3 x = np.array([[1,2],[3,4]]) 4 5 #計算全部元素的和 6 print(np.sum(x)) 7 8 #計算每一列的和 9 print(np.sum(x,axis=0)) 10 11 #計算每一行的和 12 print(np.sum(x,axis=1))
更多的函數說明:點擊這裏spa
對數組的數據進行轉置或者其餘操做:code
1 import numpy as np 2 3 x = np.array([[1,2],[3,4]]) 4 5 print(x) 6 print(x.T) 7 8 v = np.array([1,2,3]) 9 print(v) 10 print(v.T)
更多操做:點擊這裏
數組的加減乘除等運算都是對應元素之間的計算
當數組的形狀不同時,咱們能夠經過擴展數組來實現計算,這種機制叫作廣播
當運算的兩個數組形狀不相同,numpy自動觸發廣播機制
咱們常常會使用一個較小的數組,對一個較大的數組進行運算,這時廣播機制的做用就體現出來了
如:
1 import numpy as np 2 3 x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]]) 4 v = np.array([1,0,1]) 5 6 y = x + v 7 print(y) 8 #輸出結果爲 9 # [[ 2 2 4] 10 # [ 5 5 7] 11 # [ 8 8 10] 12 # [11 11 13]]
廣播機制的原則:
更多numpy模塊知識,點擊這裏