numpy模塊

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]]

廣播機制的原則:

  • 讓全部輸入數組都向其中形狀最長的數組看齊,形狀中不足的部分都經過在前面加 1 補齊。
  • 輸出數組的形狀是輸入數組形狀的各個維度上的最大值。
  • 若是輸入數組的某個維度和輸出數組的對應維度的長度相同或者其長度爲 1 時,這個數組可以用來計算,不然出錯。
  • 當輸入數組的某個維度的長度爲 1 時,沿着此維度運算時都用此維度上的第一組值。

更多numpy模塊知識,點擊這裏

相關文章
相關標籤/搜索