Numpy 基礎運算1

讓我們從一個腳本開始瞭解相應的計算以及表示形式 :

import numpy as np
a=np.array([10,20,30,40]) # array([10, 20, 30, 40])
b=np.arange(4) # array([0, 1, 2, 3])

numpy 的幾種基本運算

上述代碼中的 `a` 和 `b` 是兩個屬性為 array 也就是矩陣的變量,而且二者都是1行4列的矩陣, 其中b矩陣中的元素分別是從0到3。 如果我們想要求兩個矩陣之間的減法,你可以嘗試著輸入:

c=a-b # array([10, 19, 28, 37])

通過執行上述腳本,將會得到對應元素相減的結果,即`[10,19,28,37]`。 同理,矩陣對應元素的相加和相乘也可以用類似的方式表示:

c=a+b # array([10, 21, 32, 43])
c=a*b # array([ 0, 20, 60, 120])

有所不同的是,在Numpy中,想要求出矩陣中各個元素的乘方需要依賴雙星符號 `**`,以二次方舉例,即:

c=b**2 # array([0, 1, 4, 9])

另外,Numpy中具有很多的數學函數工具,比如三角函數等,當我們需要對矩陣中每一項元素進行函數運算時,可以很簡便的調用它們(以`sin`函數為例):

c=10*np.sin(a) 
# array([-5.44021111, 9.12945251, -9.88031624, 7.4511316 ])

除了函數應用外,在腳本中對`print`函數進行一些修改可以進行邏輯判斷:

print(b<3) 
# array([ True, True, True, False], dtype=bool)

此時由於進行邏輯判斷,返回的是一個bool類型的矩陣,即對滿足要求的返回`True`,不滿足的返回`False`。上述程序執行後得到的結果是`[True True True False]`。 需要注意的是,如果想要執行是否相等的判斷, 依然需要輸入 `==` 而不是 `=` 來完成相應的邏輯判斷。

上述運算均是建立在一維矩陣,即只有一行的矩陣上面的計算,如果我們想要對多行多維度的矩陣進行操作,需要對開始的腳本進行一些修改:

a=np.array([[1,1],[0,1]])
b=np.arange(4).reshape((2,2))
print(a)
# array([[1, 1],
# [0, 1]])
print(b)
# array([[0, 1],
# [2, 3]])

此時構造出來的矩陣`a`和`b`便是2行2列的,其中 `reshape` 操作是對矩陣的形狀進行重構, 其重構的形狀便是括號中給出的數字。 稍顯不同的是,Numpy中的矩陣乘法分為兩種, 其一是前文中的對應元素相乘,其二是標準的矩陣乘法運算,即對應行乘對應列得到相應元素:

c_dot = np.dot(a,b)
# array([[2, 4],
# [2, 3]])

除此之外還有另外的一種關於`dot`的表示方法,即:

c_dot_2 = a.dot(b)
# array([[2, 4],
# [2, 3]])

下面我們將重新定義一個腳本, 來看看關於 `sum()`, `min()`, `max()`的使用:

import numpy as np
a=np.random.random((2,4))
print(a)
# array([[ 0.94692159, 0.20821798, 0.35339414, 0.2805278 ],
# [ 0.04836775, 0.04023552, 0.44091941, 0.21665268]])

因為是隨機生成數字, 所以你的結果可能會不一樣. 在第二行中對`a`的操作是令`a`中生成一個2行4列的矩陣,且每一元素均是來自從0到1的隨機數。 在這個隨機生成的矩陣中,我們可以對元素進行求和以及尋找極值的操作,具體如下:

np.sum(a) # 4.4043622002745959
np.min(a) # 0.23651223533671784
np.max(a) # 0.90438450240606416

對應的便是對矩陣中所有元素進行求和,尋找最小值,尋找最大值的操作。 可以通過`print()`函數對相應值進行打印檢驗。

如果你需要對行或者列進行查找運算,就需要在上述代碼中為 axis 進行賦值。 當axis的值為0的時候,將會以列作為查找單元, 當axis的值為1的時候,將會以行作為查找單元。

為了更加清晰,在剛才的例子中我們繼續進行查找:

print("a =",a)
# a = [[ 0.23651224 0.41900661 0.84869417 0.46456022]
# [ 0.60771087 0.9043845 0.36603285 0.55746074]]
print("sum =",np.sum(a,axis=1))
# sum = [ 1.96877324 2.43558896]
print("min =",np.min(a,axis=0))
# min = [ 0.23651224 0.41900661 0.36603285 0.46456022]
print("max =",np.max(a,axis=1))
# max = [ 0.84869417 0.9043845 ]

最後

如果你覺得本文對你有幫助,希望可以關注並轉發,這樣我會更有動力更新的。


分享到:


相關文章: