1. 程式人生 > >NumPy基礎:通用函式

NumPy基礎:通用函式

通用函式,也可以稱為ufunc,是一種在ndarray資料中進行逐元素操作的函式。某些簡單函式接收一個或多個標量數值,併產生一個或多個標量結果,通用函式就是對這些簡單函式的向量化封裝。
有很多ufunc是簡單的逐元素轉換,比如sqrt或exp函式:

import numpy as np
arr = np.arange(10)
print(arr)
----------------------------------------------------
[0 1 2 3 4 5 6 7 8 9]
print(np.sqrt(arr))
----------------------------------------------------
[0.         1.         1.41421356 1.73205081 2.         2.23606798
 2.44948974 2.64575131 2.82842712 3.        ]
print(np.exp(arr))
----------------------------------------------------
[1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01
 5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03
 2.98095799e+03 8.10308393e+03]

這些就是所謂的一元通用函式。還有一些通用函式,比如add或maximum則則會接收兩個陣列並返回一個數組作為結果,因此稱為二元通用函式:

x = np.random.randn(8)
y = np.random.randn(8)
print(x)
----------------------------------------------------
[1.01284295 0.51008843 0.13170168 0.29898903 0.52574663 1.37900118
 0.56520683 0.73509518]
print(y)
----------------------------------------------------
[ 1.06017429 -0.18228358 -0.70774448  1.82603961 -0.62889984 -0.48199032
 -2.47668062  0.65314373]
----------------------------------------------------
print(np.maximum(x,y))
[1.06017429 0.51008843 0.13170168 1.82603961 0.52574663 1.37900118
 0.56520683 0.73509518]

這裡,numpy.maximum逐個元素地將x和y中元素的最大值給計算出來。
也有一些通用函式返回多個數組。比如modf,是python內建函式divmod的向量化版本。它返回一個浮點值陣列的小數部分和整數部分:

arr = np.random.rand(7) * 5
print(arr)
----------------------------------------------------
[3.74045832 4.83364    2.70811033 4.99247033 3.82438603 4.54268595
 1.00967246]
remainder,whole_part = np.modf(arr)
print(remainder)
----------------------------------------------------
[0.74045832 0.83364    0.70811033 0.99247033 0.82438603 0.54268595
 0.00967246]
print(whole_part)
----------------------------------------------------
[3. 4. 2. 4. 3. 4. 1.]

表1-1:一元通用函式

函式名 描述
abs、fabs 逐元素地計算整數、浮點數或複數的值
square 計算每個元素的平方
sign 計算每個元素的符號值:1(正數)、0(0)、-1(負數)
ceil 計算大於等於給定數值的最小整數
floor 計算小於等於給定數值的最大整數
rint 將元素保留到整數位,並保持dtype
modf f分別將陣列的小數部分和整數部分按陣列形式返回
isnan 返回陣列中的元素是否是一個NaN,形式為布林值陣列
log、log10、log2、log1p 分別對應:自然對數為底,對數10為底,對數2為底,log(1+x)

表1-2:二元通用函式

函式名 描述
add 將陣列的對應元素相加
subtract 在第二個陣列中,將第一個陣列中包含的元素去除
multiply 將陣列的對應元素相乘
divide,floor_divide 除或整除(放棄餘數)
power 將第二個陣列的元素作為第一個陣列對應元素的冪次方
maximum,fmax 逐個元素計算最大值,fmax忽略NaN
minimum,fmin 逐個元素計算最小值,fmin忽略NaN
mod 即求除法的餘數