1. 程式人生 > >Numpy基礎(二)

Numpy基礎(二)

Numpy作為科學計算的基礎包,那就理所應當的有計算方面的優勢,今天就來吧啦一下Numpy的計算

算數運算子

陣列的第一類運算是使用算術運算子進行的運算。最顯而易見的就是陣列加上或者乘以一個標量

In [1]: import numpy as np

In [2]: a = np.arange(4)

In [3]: a
Out[3]: array([0, 1, 2, 3])

In [4]: a+4
Out[4]: array([4, 5, 6, 7])

In [5]: a * 2
Out[5]: array([0, 2, 4, 6])

在Numpy中,這些運算稱為元素級。也就是說,它們只用於位置相同的元素之間,所得到的運算結果組成一個新的陣列。運算結果在新的陣列中的位置跟運算元位置相同(如下圖)

對於多維陣列,這些運算子還是元素級

In [6]: A = np.arange(0,9).reshape(3,3)

In [7]: A
Out[7]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [8]: B = np.ones((3,3))

In [9]: A * B
Out[9]:
array([[0., 1., 2.],
       [3., 4., 5.],
       [6., 7., 8.]])

矩陣積

選擇使用*號作為元素級運算子是Numpy庫比較奇怪的一點。事實上,在很多的其他資料分析工具中,*在用於兩個矩陣之間的運算時指的是矩陣積。而Numpy用dot()

函式表示這類乘法,注意,它不是元素級的

In [10]: np.dot(A,B)
Out[10]:
array([[ 3.,  3.,  3.],
       [12., 12., 12.],
       [21., 21., 21.]])

所得到的陣列每一個元素為,第一個矩陣中與鈣元素行號相同的元素與第二個矩陣中與該元素列號相同的元素,兩兩相乘後求和。

這裡寫圖片描述

由於矩陣運算不遵循交換律,所以一定要注意運算物件的順序。A*B確實不等於B*A

In [11]: B.dot(A)
Out[11]:
array([[ 9., 12., 15.],
       [ 9., 12., 15.],
       [ 9., 12., 15.]]
)

通用函式

通用函式通常叫做ufunc,它對陣列中的各個元素逐一進行操作。這表示,通用函式分別處理陣列的每一元素,生成的結果組成一個新的輸出陣列。輸出陣列的大小跟輸入陣列相同

常見函式列表:

函式 說明
abs 計算絕對值
sqrt 平方根
sin 三角函式sin值
log 對數函式

例如:

In [13]: a
Out[13]: array([1, 2, 3, 4])

In [14]: np.sqrt(a)
Out[14]: array([1., 1.41421356, 1.73205081, 2. ])

In [15]: np.log(a)
Out[15]: array([0. , 0.69314718, 1.09861229, 1.38629436])

In [16]: np.sin(a)
Out[16]: array([ 0.84147098,  0.90929743,  0.14112001, -0.7568025 ])

聚合函式

聚合函式是指對一組值進行操作,返回一個單一值作為結果的函式。

方法 說明
sum 求和
mean 算術平均數
std 標準差
var 方差
max,min 最大、最小值
argmin,argmax 最小元素、最大元素的索引
cumsum 所有元素的累積和
cumprod 所有元素的累積積

例如:

In [17]: arr = np.random.randn(5,4) #正態分佈的資料

In [18]: arr.mean()
Out[18]: 0.43615453064415943

In [19]: np.mean(arr)
Out[19]: 0.43615453064415943

In [20]: arr.sum()
Out[20]: 8.723090612883189

排序

跟python內建的列表型別一樣,Numpy陣列也可以通過sort()方法進行就地排序

In [21]: arr = np.random.randint(0,8,5)

In [22]: arr
Out[22]: array([7, 6, 0, 0, 5])

In [23]: arr.sort()

In [24]: arr
Out[24]: array([0, 0, 5, 6, 7])

唯一化和其他集合邏輯

Numpy提供了一些針對一維ndarray的基本集合運算。最常用的可能要輸np.unique了,它用於找出陣列中唯一值並返回已排序的結果

In [25]:names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])

In [26]:np.unique(names)
Out[26]:array(['Bob', 'Joe', 'Will'], dtype='<U4')

另一個函式np.in1d用於測試一個數組中的值是否在另一個數組中,返回一個布林型陣列

In [27]:values = np.array([6,0,0,3,2,5,8])
In [28]:np.in1d(values,[2,3,6])
Out[28]:
array([ True, False, False,  True,  True, False, False])

最後

以上就是今天關於Numpy的分享,主要就是一些運算函式的介紹和使用,你記住了多少了呢。下面放上思維導圖,一起來回憶一下
這裡寫圖片描述