NumPy基礎:通用函式
阿新 • • 發佈:2018-11-19
通用函式,也可以稱為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 | 即求除法的餘數 |