數學函式
NumPy 提供許多數學函式,包含三角函數、指數、對數、最小公倍數、最大公因數...等,可以快速計算陣列中的元素,這篇教學將會介紹 NumPy 常用的數學函式。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
NumPy 常用數學函式
下方列出幾種 NumPy 常用的數學函式 ( 完整函式可參考 NumPy 官方文件:Arithmetic operations ):
分類 | 說明 |
---|---|
三角函數 | 包含 sin、cos、tan、斜邊、角度轉弧度...等三角函數計算函式。 |
四捨五入 | 包含 around、round、floor、ceil...等四捨五入進位函式。 |
總和、乘積、差值 | 包含 prod、sum、diff...等計算總和、乘積或差值的函式。 |
極值 | 包含 maximum、minimum...等求出最大值、最小值的函式。 |
其他計算公式 | 包含 square、cbrt、absolute...等求平方、立方、絕對值的函式。 |
三角函數
下方列出 NumPy 常用的三角函數函式:
函式 | 參數 | 說明 |
---|---|---|
numpy.sin() | a | 正弦函數,參數單位為弧度。 |
numpy.cos() | a | 餘弦函數,參數單位為弧度。 |
numpy.tan() | a | 正切函數,參數單位為弧度。 |
numpy.arcsin() | a | 反正弦函數,參數單位為弧度。 |
numpy.arccos() | a | 反正弦函數,參數單位為弧度。 |
numpy.arctan() | a | 反正弦函數,參數單位為弧度。 |
numpy.hypot() | a,b | 直角三角形已知兩邊,求出斜邊長。 |
numpy.degrees()、numpy.rad2deg() | a | 弧度轉角度。 |
numpy.radians()、numpy.deg2rad() | a | 角度轉弧度。 |
import numpy as np
a = np.array([30,60,90]) # 起始陣列為 30、60、90 度
b = np.deg2rad(a) # 轉換成弧度陣列
print(np.sin(b)) # [0.5 0.8660254 1. ]
print(np.cos(b)) # [8.66025404e-01 5.00000000e-01 6.12323400e-17]
print(np.tan(b)) # [5.77350269e-01 1.73205081e+00 1.63312394e+16]
x = np.array([30,60,90]) # 直角三角形某一邊
y = np.array([30,30,30]) # 直角三角形某一邊
z = np.hypot(x, y)
print(z) # [42.42640687 67.08203932 94.86832981]
四捨五入
下方列出 NumPy 常用的四捨五入函式:
函式 | 參數 | 說明 |
---|---|---|
numpy.around() | a, decimals | 四捨五入,decimals 為四捨五入的小數點位數 ( 預設 0 ),設定「負值」則是整數位數。 |
numpy.rint() | a | 四捨五入到最接近的整數。 |
numpy.fix()、numpy.trunc() | a | 捨棄所有小數點,只取出整數。 |
numpy.floor() | a | 進位至數字區間整數的最小值。 |
numpy.ceil() | a | 進位至數字區間整數的最大值。 |
import numpy as np
a = np.array([110.3333, 122.5, 155.4999])
print(np.around(a)) # [110. 122. 155.]
print(np.around(a, 2)) # [110.33 122.5 155.5 ]
print(np.around(a, -1)) # [110. 120. 160.]
print(np.around(a, -2)) # [100. 100. 200.]
print(np.fix(a)) # [110. 122. 155.]
print(np.trunc(a)) # [110. 122. 155.]
b = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])
print(np.rint(b)) # [-2. -2. -0. 0. 2. 2. 2.]
print(np.floor(b)) # [-2. -2. -1. 0. 1. 1. 2.]
print(np.ceil(b)) # [-1. -1. -0. 1. 2. 2. 2.]
總和、乘積、差值
下方列出 NumPy 常用的和、乘積、差值函式:
函式 | 參數 | 說明 |
---|---|---|
numpy.prod() | a, axis | 返回所有元素的乘積,指定 axis 則返回特定維度元素的乘積。 |
numpy.sum() | a, axis | 返回所有元素的加總,指定 axis 則返回特定維度元素的加總。 |
numpy.cumprod() | a, axis | 返回所有元素的累積乘積,指定 axis 則返回特定維度元素的累積乘積。 |
numpy.cumsum() | a, axis | 返回所有元素的累積加總,指定 axis 則返回特定維度元素的累積加總。 |
numpy.diff() | a, axis | 返回所有元素的離散差。 |
numpy.ediff1d() | a, axis | 返回所有元素與元素之間的差異。 |
import numpy as np
a = np.array([[1,3,5],[6,7,8]])
print(np.prod(a)) # 5040
print(np.prod(a,0)) # [ 6 21 40] --> 1*6、3*7、5*8
print(np.prod(a,1)) # [ 15 336] --> 1*3*5、6*7*8
print(np.sum(a)) # 30
print(np.sum(a,0)) # [ 7 10 13] --> 1+6、3+7、5+8
print(np.sum(a,1)) # [ 9 21] --> 1+3+5、6+7+8
print(np.cumprod(a)) # [ 1 3 15 90 630 5040]
print(np.cumsum(a)) # [ 1 4 9 15 22 30]
print(np.diff(a)) # [[2 2] [1 1]]
print(np.ediff1d(a)) # [2 2 1 1 1]
極值
下方列出 NumPy 常用的極值函式:
函式 | 參數 | 說明 |
---|---|---|
numpy.maximum()、numpy.fmax() | a, b | 取出 a、b 兩個陣列中的最大值,組成新的陣列。 |
numpy.minimum()、numpy.fmin() | a, axis | 取出 a、b 兩個陣列中的最小值,組成新的陣列。 |
numpy.amax() | a, axis | 取出 a 陣列中的最大值,指定 axis 則將最大值組合成新的陣列。 |
numpy.amin() | a, axis | 取出 a 陣列中的最小值,指定 axis 則將最小值組合成新的陣列。 |
import numpy as np
a = np.array([1,9,5,4,7])
b = np.array([2,6,8,6,3])
print(np.maximum(a,b)) # [2 9 8 6 7]
print(np.fmax(a,b)) # [2 9 8 6 7]
print(np.minimum(a,b)) # [1 6 5 4 3]
print(np.fmin(a,b)) # [1 6 5 4 3]
c = np.array([[1,9,5,4,7],[2,6,8,6,3]])
print(np.amax(c)) # 9
print(np.amax(c,0)) # [2 9 8 6 7]
print(np.amax(c,1)) # [9 8]
print(np.amin(c)) # 1
print(np.amin(c,0)) # [1 6 5 4 3]
print(np.amin(c,1)) # [1 2]
其他計算公式
下方列出 NumPy 其他常用的函式:
函式 | 參數 | 說明 |
---|---|---|
numpy.lcm() | a, b | 計算 a、b 兩個陣列元素的最小公倍數,組成新的陣列。 |
numpy.gcd() | a, b | 計算 a、b 兩個陣列元素的最大公因數,組成新的陣列。 |
numpy.sqrt() | a | 計算 a 陣列元素的平方根 ( a 元素必須為正值 ),組成新的陣列。 |
numpy.cbrt() | a | 計算 a 陣列元素的立方根,組成新的陣列。 |
numpy.square() | a | 計算 a 陣列元素的平方,組合成新的陣列。 |
numpy.absolute()、numpy.fabs() | a | 計算 a 陣列元素的絕對值 ( fabs 計算後為浮點數 ),組合成新的陣列。 |
numpy.clip() | a, min, max | 替換 a 陣列中數值超過 min 或 max 的元素,組成新的陣列。 |
import numpy as np
a = np.array([15,20,6,8,11])
b = np.array([25,50,18,6,33])
print(np.lcm(a,b)) # [ 75 100 18 24 33]
# 最小公倍數
print(np.gcd(a,b)) # [ 5 10 6 2 11]
# 最大公因數
c = np.array([8,9,64])
print(np.sqrt(c)) # [2.82842712 3. 8. ]
print(np.cbrt(c)) # [2. 2.08008382 4. ]
d = np.array([-2,-1,0,1,2])
print(np.fabs(d)) # [2. 1. 0. 1. 2.]
print(np.absolute(d)) # [2 1 0 1 2]
e = np.array([1,2,3,4,5,6,7,8,9])
print(np.clip(e,3,6)) # [3 3 3 4 5 6 6 6 6]
# 剪裁小於 3 的都變成 3,大於 6 的都變成 6
print(np.clip(e,3,1)) # [1 1 1 1 1 1 1 1 1]
# 因為 max 為 1,剪裁後全部都變成 1
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~