Numpy 基礎運算2

學習資料:

  • Numpy中文文檔(https://www.numpy.org.cn/)

先從一個腳本開始 :

import numpy as np
A = np.arange(2,14).reshape((3,4))
# array([[ 2, 3, 4, 5]
# [ 6, 7, 8, 9]
# [10,11,12,13]])
print(np.argmin(A)) # 0
print(np.argmax(A)) # 11

numpy 的幾種基本運算

其中的 argmin() 和 argmax() 兩個函數分別對應著求矩陣中最小元素和最大元素的索引。相應的,在矩陣的12個元素中,最小值即2,對應索引0,最大值為13,對應索引為11。

如果需要計算統計中的均值,可以利用下面的方式,將整個矩陣的均值求出來:

print(np.mean(A)) # 7.5
print(np.average(A)) # 7.5

仿照著前一節中dot() 的使用法則,mean()函數還有另外一種寫法:

print(A.mean()) # 7.5

同樣的,我們可以寫出求解中位數的函數:

print(A.median()) # 7.5

另外,和matlab中的cumsum()累加函數類似,Numpy中也具有cumsum()函數,其用法如下:

print(np.cumsum(A)) 
# [2 5 9 14 20 27 35 44 54 65 77 90]

在cumsum()函數中:生成的每一項矩陣元素均是從原矩陣首項累加到對應項的元素之和。比如元素9,在cumsum()生成的矩陣中序號為3,即原矩陣中2,3,4三個元素的和。

相應的有累差運算函數:

print(np.diff(A)) 
# [[1 1 1]
# [1 1 1]
# [1 1 1]]

該函數計算的便是每一行中後一項與前一項之差。故一個3行4列矩陣通過函數計算得到的矩陣便是3行3列的矩陣。

下面我們介紹一下nonzero()函數:

print(np.nonzero(A)) 
# (array([0,0,0,0,1,1,1,1,2,2,2,2]),array([0,1,2,3,0,1,2,3,0,1,2,3]))

這個函數將所有非零元素的行與列座標分割開,重構成兩個分別關於行和列的矩陣。

同樣的,我們可以對所有元素進行仿照列表一樣的排序操作,但這裡的排序函數仍然僅針對每一行進行從小到大排序操作:

import numpy as np
A = np.arange(14,2, -1).reshape((3,4))
# array([[14, 13, 12, 11],
# [10, 9, 8, 7],
# [ 6, 5, 4, 3]])
print(np.sort(A))
# array([[11,12,13,14]
# [ 7, 8, 9,10]
# [ 3, 4, 5, 6]])

矩陣的轉置有兩種表示方法:

print(np.transpose(A)) 
print(A.T)
# array([[14,10, 6]
# [13, 9, 5]
# [12, 8, 4]
# [11, 7, 3]])
# array([[14,10, 6]
# [13, 9, 5]
# [12, 8, 4]
# [11, 7, 3]])

特別的,在Numpy中具有clip()函數,例子如下:

print(A)
# array([[14,13,12,11]
# [10, 9, 8, 7]
# [ 6, 5, 4, 3]])
print(np.clip(A,5,9))
# array([[ 9, 9, 9, 9]
# [ 9, 9, 8, 7]
# [ 6, 5, 5, 5]])

這個函數的格式是clip(Array,Array_min,Array_max),顧名思義,Array指的是將要被執行用的矩陣,而後面的最小值最大值則用於讓函數判斷矩陣中元素是否有比最小值小的或者比最大值大的元素,並將這些指定的元素轉換為最小值或者最大值。

實際上每一個Numpy中大多數函數均具有很多變量可以操作,你可以指定行、列甚至某一範圍中的元素。更多具體的使用細節請記得查閱 Numpy中文文檔。

最後

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


分享到:


相關文章: