1. 程式人生 > >Python資料處理之(五)numpy基礎運算2

Python資料處理之(五)numpy基礎運算2

通過上一節的學習,我們可以瞭解到一部分矩陣中元素的計算和查詢操作。然而在日常使用中,對應元素的索引也是非常重要的。依然,讓我們先從一個指令碼開始 :

>>> import numpy as np
>>> A=np.arange(2,14).reshape((3,4))
>>> print(A)
[[ 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(A.mean())
7.5
>>> print(np.mean(A))
7.5
>>> print(np.average(A))
7.5

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

>>> print(np.
median(A)) 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,即原矩陣中234三個元素的和。

相應的有累差運算函式:

>>> 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], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))

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

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

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

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

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

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

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

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

實際上每一個Numpy中大多數函式均具有很多變數可以操作,你可以指定行、列甚至某一範圍中的元素。