第84天:NumPy 數學函數


by 閑歡

本文向大家介紹一下 NumPy 常見的數學函數。

NumPy 三角函數

三角函數是基本初等函數之一,是以角度(數學上最常用弧度制,下同)為自變量,角度對應任意角終邊與單位圓交點坐標或其比值為因變量的函數。三角函數一般用於計算三角形中未知長度的邊和未知的角度,在導航、工程學以及物理學方面都有廣泛的用途。

常見的三角函數包括正弦函數、余弦函數和正切函數。下面我們來學習這三個常見的三角函數:

函數 描述
sin() 數組中角度的正弦值
cos() 數組中角度的余弦值
tan() 數組中角度的正切值
arcsin() 數組中角度的反正弦值
arccos() 數組中角度的反余弦值
arctan() 數組中角度的反正切值
degrees() 將弧度轉換成角度

我們直接來看實例:

import numpy as np

a = np.array([0, 30, 45, 60, 90])

print(np.char.center('不同角度的正弦值', 30, '*'))
# 通過乘 pi/180 轉化為弧度
sin = np.sin(a*np.pi/180)
print(sin)
print('\n')

print(np.char.center('不同角度的余弦值', 30, '*'))
# 通過乘 pi/180 轉化為弧度
cos = np.cos(a*np.pi/180)
print(cos)
print('\n')

print(np.char.center('不同角度的正切值', 30, '*'))
# 通過乘 pi/180 轉化為弧度
tan = np.tan(a*np.pi/180)
print(tan)
print('\n')

print(np.char.center('不同角度的反正弦值', 30, '*'))
arcsin = np.arcsin(sin)
# 將弧度轉換成角度打印輸出
print(np.degrees(arcsin))
print('\n')

print(np.char.center('不同角度的反余弦值', 30, '*'))
arccos = np.arccos(cos)
# 將弧度轉換成角度打印輸出
print(np.degrees(arccos))
print('\n')

print(np.char.center('不同角度的反正切值', 30, '*'))
arctan = np.arctan(tan)
# 將弧度轉換成角度打印輸出
print(np.degrees(arctan))
print('\n')

# 返回
***********不同角度的正弦值***********
[0.         0.5        0.70710678 0.8660254  1.        ]
***********不同角度的余弦值***********
[1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
 6.12323400e-17]
***********不同角度的正切值***********
[0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
 1.63312394e+16]
**********不同角度的反正弦值***********
[ 0. 30. 45. 60. 90.]
**********不同角度的反余弦值***********
[ 0. 30. 45. 60. 90.]
**********不同角度的反正切值***********
[ 0. 30. 45. 60. 90.]

上面例子中,我們先計算不同角度的正弦值、余弦值、正切值,然后我們通過反三角函數,將前面計算的值計算成弧度,然后通過 degrees 函數轉換成角度。我們可以看到最后的出來的角度和開始輸入的數組的角度是一樣的。

NumPy 四舍五入函數

我們在數據的處理中可能會遇到需要將一組數字進行四舍五入操作,這時候我們就可以使用 NumPy 提供的四舍五入函數來處理了。

函數 描述
around() 四舍五入
round() 舍棄小數位
floor() 向下取整
ceil() 向上取整

numpy.around()

對數組中的數字進行四舍五入

我們來看實例:

import numpy as np

a = np.array([1, 2.0, 30.12, 129.567])

# 四舍五入(取整)
print(np.around(a))
# 四舍五入(取一位小數)
print(np.around(a, decimals=1))
# 四舍五入(取小數點左側第一位)
print(np.around(a, decimals=-1))

# 返回
[  1.   2.  30. 130.]
[  1.    2.   30.1 129.6]
[  0.   0.  30. 130.]

我們可以通過 decimals 參數來表示舍入的小數位數,默認值為0。 如果為負,整數將四舍五入到小數點左側的位置。

numpy.round()

對數組中的數字進行若干位的舍棄。

我們來看實例:

import numpy as np

a = np.array([1, 2.0, 30.12, 129.567])

# 只舍不入(取整)
print(np.around(a))
# 只舍不入(到小數點后一位)
print(np.around(a, decimals=1))
# 只舍不入(取小數點左側第一位)
print(np.around(a, decimals=-1))

# 返回
[  1.   2.  30. 130.]
[  1.    2.   30.1 129.6]
[  0.   0.  30. 130.]

這個函數與 around 函數的區別就是只是舍棄,不做四舍五入。

numpy.floor()

返回小於或者等於指定表達式的最大整數,即向下取整。

我們來看實例:

import numpy as np

a = np.array([1, 2.0, 30.12, 129.567])

# 向下取整
print(np.floor(a))

# 返回
[  1.   2.  30. 129.]

這個函數很好理解,就是舍棄小數位。

numpy.ceil()

返回大於或者等於指定表達式的最小整數,即向上取整。

我們來看實例:

import numpy as np

a = np.array([1, 2.0, 30.12, 129.567])

# 向上取整
print(np.ceil(a))

# 返回
[  1.   2.  31. 130.]

這個函數和上面的 floor 是相反含義的函數,向上取整意思是如果沒有小數位或者小數位是0,取當前整數;如果有小數位並且小數位不是0,則取當前數字的整數加1。

NumPy 算術函數

接下來我們來介紹一下 NumPy 的幾個常用的算術函數:

函數 描述
add() 兩個數組元素相加
multiply() 兩個數組元素相乘
divide() 兩個數組元素相除
subtract() 兩個數組元素相減
pow() 將第一個輸入數組中的元素作為底數,計算它與第二個輸入數組中相應元素的冪
mod() 計算輸入數組中相應元素的相除后的余數

我們先來看看兩個數組元素的加減乘除的實例:

import numpy as np

a = np.arange(6, dtype=np.float_).reshape(2, 3)
print('第一個數組:')
print(a)
print('第二個數組:')
b = np.array([10, 10, 10])
print(b)
print('\n')

print(np.char.center('兩個數組相加', 20, '*'))
print(np.add(a, b))
print('\n')

print(np.char.center('兩個數組相減', 20, '*'))
print(np.subtract(a, b))
print('\n')

print(np.char.center('兩個數組相乘', 20, '*'))
print('兩個數組相乘:')
print(np.multiply(a, b))
print('\n')

print(np.char.center('兩個數組相除', 20, '*'))
print(np.divide(a, b))
print('\n')

# 返回
第一個數組:
[[0. 1. 2.]
 [3. 4. 5.]]
第二個數組:
[10 10 10]
*******兩個數組相加*******
[[10. 11. 12.]
 [13. 14. 15.]]
*******兩個數組相減*******
[[-10.  -9.  -8.]
 [ -7.  -6.  -5.]]
*******兩個數組相乘*******
兩個數組相乘:
[[ 0. 10. 20.]
 [30. 40. 50.]]
*******兩個數組相除*******
[[0.  0.1 0.2]
 [0.3 0.4 0.5]]

在上面例子中,我們先定義了兩個數組,第一個數一個二維數組,第二個是一個一維數組,然后對兩個數組的元素進行加減乘除操作,返回的是一個二維數組。

這里需要注意的是數組必須具有相同的形狀或符合數組廣播規則。

numpy.pow

將第一個輸入數組中的元素作為底數,計算它與第二個輸入數組中相應元素的冪。

我們先來看看實例:

import numpy as np

c = np.array([10, 100, 1000])
print('第一個數組是:')
print(c)
print('\n')

print(np.char.center('調用 power 函數', 20, '*'))
print(np.power(c, 2))
print('\n')

d = np.array([1, 2, 3])
print('第二個數組是:')
print(d)
print('\n')

print(np.char.center('再次調用 power 函數', 20, '*'))
print(np.power(c, d))

# 返回
第一個數組是:
[  10  100 1000]
****調用 power 函數*****
[    100   10000 1000000]
第二個數組是:
[1 2 3]
***再次調用 power 函數****
[        10      10000 1000000000]

從例子中我們可以看到,如果第二個參數是數字,就將第一個參數數組中的每個元素作為底數,計算它與第二個參數的冪;如果第二個參數是數組,那就將第一個參數數組中的每個元素作為底數,計算它與第二個數組中元素的冪。

numpy.mod()

計算輸入數組中相應元素的相除后的余數。

我們先來看看實例:

import numpy as np

e = np.array([10, 20, 30])
f = np.array([3, 5, 7])
print('第一個數組:')
print(e)
print('\n')

print('第二個數組:')
print(f)
print('\n')

print(np.char.center('調用 mod 函數', 20, '*'))
print(np.mod(e, f))

# 返回
第一個數組:
[10 20 30]
第二個數組:
[3 5 7]
*****調用 mod 函數******
[1 0 2]

這里也需要注意數組必須具有相同的形狀或符合數組廣播規則。

總結

本文向大家介紹了 NumPy 的數學函數,包括三角函數、四舍五入函數和算術函數。這些函數在一些數據分析中比較常見,運用得好會使你事半功倍。

參考

https://numpy.org/devdocs/reference/routines.math.html

文中示例代碼:python-100-days

關注公眾號:python技術,回復"python"一起學習交流


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM