pin_drop当前位置:知识文库 ❯ 图文
NumPy数学函数大全 - 三角函数指数对数取整运算教程
目录
一、数学函数概述
NumPy提供了丰富的数学函数库,涵盖三角函数、指数对数、取整、绝对值等常用数学运算。这些函数都是向量化的,可以直接对整个数组进行运算,无需编写循环。NumPy数学函数底层用C实现,运算速度远超Python内置math模块。
二、三角函数详解
三、指数与对数函数
四、取整与绝对值函数
五、三角函数运算示例
NumPy三角函数使用弧度制,需要先将角度转换为弧度:
代码示例
import numpy as np
# 创建角度数组
angles = np.array([0, 30, 45, 60, 90])
radians = np.radians(angles)
print(f"角度: {angles}")
print(f"弧度: {radians}")
print(f"正弦: {np.round(np.sin(radians), 4)}")
print(f"余弦: {np.round(np.cos(radians), 4)}")
print(f"正切: {np.round(np.tan(radians), 4)}")
输出结果:
代码示例
角度: [ 0 30 45 60 90]
弧度: [0. 0.5236 0.7854 1.0472 1.5708]
正弦: [0. 0.5 0.7071 0.866 1. ]
余弦: [1. 0.866 0.7071 0.5 0. ]
正切: [0. 0.5774 1. 1.7321 1.6331e+16]
六、指数与对数运算示例
代码示例
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(f"原数组: {arr}")
print(f"e^x: {np.round(np.exp(arr), 4)}")
print(f"2^x: {np.exp2(arr)}")
print(f"ln(x): {np.round(np.log(arr), 4)}")
print(f"log2(x): {np.log2(arr)}")
print(f"log10(x): {np.round(np.log10(arr), 4)}")
print(f"sqrt(x): {np.round(np.sqrt(arr), 4)}")
输出结果:
代码示例
原数组: [1 2 3 4 5]
e^x: [ 2.7183 7.3891 20.0855 54.5982 148.4132]
2^x: [ 2. 4. 8. 16. 32.]
ln(x): [0. 0.6931 1.0986 1.3863 1.6094]
log2(x): [0. 1. 1.5849625 2. 2.32192809]
log10(x): [0. 0.301 0.4771 0.6021 0.699 ]
sqrt(x): [1. 1.4142 1.7321 2. 2.2361]
七、取整与绝对值运算示例
代码示例
import numpy as np
arr = np.array([-3.7, -2.3, -1.5, 0.5, 1.5, 2.3, 3.7])
print(f"原数组: {arr}")
print(f"绝对值: {np.abs(arr)}")
print(f"四舍五入: {np.round(arr)}")
print(f"向下取整: {np.floor(arr)}")
print(f"向上取整: {np.ceil(arr)}")
print(f"截断: {np.trunc(arr)}")
print(f"符号: {np.sign(arr)}")
输出结果:
代码示例
原数组: [-3.7 -2.3 -1.5 0.5 1.5 2.3 3.7]
绝对值: [3.7 2.3 1.5 0.5 1.5 2.3 3.7]
四舍五入: [-4. -2. -2. 0. 2. 2. 4.]
向下取整: [-4. -3. -2. 0. 1. 2. 3.]
向上取整: [-3. -2. -1. 1. 2. 3. 4.]
截断: [-3. -2. -1. 0. 1. 2. 3.]
符号: [-1. -1. -1. 1. 1. 1. 1.]
小贴士
对于负数,floor向下取(-3.7 → -4),ceil向上取(-3.7 → -3),trunc截断小数部分(-3.7 → -3)。floor和ceil的方向是数轴方向,不是远离/靠近零点。
八、NumPy与math模块对比
九、注意事项
注意:NumPy三角函数使用弧度制,需要先用
np.radians()将角度转为弧度。
注意:
np.log(0)会产生 -inf,np.log(负数)会产生 nan,需提前处理数据。
注意:
np.round()使用银行家舍入法(四舍六入五成双),与Python内置round一致。例如 np.round(0.5) = 0,np.round(1.5) = 2。
常见问题
为什么np.tan(90度)的结果不是无穷大?
因为浮点数精度限制,π/2无法精确表示,所以tan(π/2)不会恰好是无穷大,而是一个极大的数(如1.6331e+16)。这在所有编程语言中都是普遍现象。
如何实现softmax函数?
使用公式 softmax(x) = np.exp(x) / np.sum(np.exp(x))。为避免数值溢出,推荐减去最大值:np.exp(x - np.max(x)) / np.sum(np.exp(x - np.max(x)))。
floor和trunc有什么区别?
对于正数两者相同,对于负数不同:floor(-3.7)=-4(向下取整),trunc(-3.7)=-3(截断小数)。floor向负无穷方向,trunc向零方向。
如何处理对数运算中的负数和零?
可以使用 np.clip(arr, a_min=1e-10, a_max=None) 将数组中的非正值裁剪为一个极小的正数,避免产生-inf或nan。也可用 np.where 条件过滤。
NumPy数学函数比math模块快多少?
对于100万元素的数组,NumPy向量化运算比Python循环+math快约50-100倍。差异来自NumPy的C实现和SIMD并行指令,数据量越大优势越明显。
本文涉及AI创作
内容由AI创作,请仔细甄别