Python資料處理之(四)numpy基礎運算1
一、一維矩陣的基礎運算
下例中 a
和b
是兩個屬性為array
也就是矩陣的變數,而且二者都是1行4列
的矩陣, 其中b
矩陣中的元素分別是從0
到3
。 如果我們想要求兩個矩陣之間的減法,你可以嘗試著輸入:a-b
,得到的結果是對應元素相減的結果也就是[10 19 28 37]
,同理元素的相加相乘操作也是一樣的,但是需要注意:python
中的x
的y
次方是通過x**y
語句實現的。另外,Numpy
中具有很多的數學函式工具,比如三角函式等,當我們需要對矩陣中每一項元素進行函式運算時,可以很簡便的呼叫它們。除了函式應用外,在指令碼中對print函式進行一些修改可以進行邏輯判斷,此時由於進行邏輯判斷,返回的是一個bool
True
,不滿足的返回False
。下述程式執行後得到的結果是[True True True False]
。 需要注意的是,如果想要執行是否相等的判斷, 依然需要輸入==
而不是=
來完成相應的邏輯判斷。
下述運算均是建立在一維矩陣,即只有一行的矩陣上面的計算。
>>> import numpy as np
>>> a=np.array([10,20,30,40])
>>> b=np.arange(4)
>>> print(a)
[10 20 30 40]
>>> print(b)
[0 1 2 3]
>>> print(a-b)
[10 19 28 37]
>>> print(a+b)
[10 21 32 43]
>>> print(b**2)
[0 1 4 9]
>>> print(np.sin(a))
[-0.54402111 0.91294525 -0.98803162 0.74511316]
>>> print(b<3)
[ True True True False]
>>>
二、二維矩陣的基礎運算
構建兩行兩列的矩陣a
,b
>>> import numpy as np
>>> a=np.array([[1,1],[0,1]])
>>> print(a)
[[1 1]
[0 1]]
>>> b=np.arange(4).reshape((2,2))
>>> print(b)
[[0 1]
[2 3]]
此時構造出來的矩陣a
和b
便是2
行2
列的,其中reshape
操作是對矩陣的形狀進行重構, 其重構的形狀便是括號中給出的數字。 稍顯不同的是,Numpy
中的矩陣乘法分為兩種, 其一是前文中的對應元素相乘,其二是標準的矩陣乘法運算(dot)
,即對應行乘對應列得到相應元素:
>>> c=np.dot(a,b)
>>> print(c)
[[2 4]
[2 3]]
除此之外還有另外的一種關於dot的表示方法,即:
>>> c=a.dot(b)
>>> print(c)
[[2 4]
[2 3]]
下面我們將重新定義一個指令碼, 來看看關於 sum(), min(), max()的使用:
>>> import numpy as np
>>> a=np.random.random((2,4))
>>> print(a)
[[0.07010833 0.19889998 0.38917305 0.0794427 ]
[0.81524484 0.96631118 0.95301291 0.25478591]]
因為是隨機生成數字, 所以你的結果可能會不一樣. 在第二行中對a的操作是令a中生成一個2行4列的矩陣,且每一元素均是來自從0到1的隨機數。 在這個隨機生成的矩陣中,我們可以對元素進行求和以及尋找極值的操作,具體如下:
>>> np.sum(a)
3.7269788971146403
>>> np.min(a)
0.07010832669552214
>>> np.max(a)
0.9663111797693855
對應的便是對矩陣中所有元素進行求和,尋找最小值,尋找最大值的操作。 可以通過print()函式對相應值進行列印檢驗。
如果你需要對行或者列進行查詢運算,就需要在上述程式碼中為 axis 進行賦值。 當axis的值為0的時候,將會以列作為查詢單元, 當axis的值為1的時候,將會以行作為查詢單元。
為了更加清晰,在剛才的例子中我們繼續進行查詢:
>>> print('a=',a)
a= [[0.07010833 0.19889998 0.38917305 0.0794427 ]
[0.81524484 0.96631118 0.95301291 0.25478591]]
>>> print('sum=',np.sum(a,axis=1))
sum= [0.73762406 2.98935484]
>>> print('sum=',np.sum(a,axis=0))
sum= [0.88535317 1.16521116 1.34218596 0.33422861]
>>> print('sum=',np.min(a,axis=0))
sum= [0.07010833 0.19889998 0.38917305 0.0794427 ]
>>> print('sum=',np.max(a,axis=1))
sum= [0.38917305 0.96631118]