Numpy基礎(二)
阿新 • • 發佈:2018-12-25
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的分享,主要就是一些運算函式的介紹和使用,你記住了多少了呢。下面放上思維導圖,一起來回憶一下