pin_drop当前位置:知识文库 ❯ 图文

NumPy数学函数大全 - 三角函数指数对数取整运算教程

一、数学函数概述

NumPy提供了丰富的数学函数库,涵盖三角函数、指数对数、取整、绝对值等常用数学运算。这些函数都是向量化的,可以直接对整个数组进行运算,无需编写循环。NumPy数学函数底层用C实现,运算速度远超Python内置math模块。


二、三角函数详解

函数 说明 示例
np.sin(x) 正弦 np.sin(np.pi/2) = 1.0
np.cos(x) 余弦 np.cos(0) = 1.0
np.tan(x) 正切 np.tan(np.pi/4) ≈ 1.0
np.arcsin(x) 反正弦 np.arcsin(1) = π/2
np.arccos(x) 反余弦 np.arccos(1) = 0
np.arctan(x) 反正切 np.arctan(1) = π/4
np.degrees(x) 弧度转角度 np.degrees(np.pi) = 180
np.radians(x) 角度转弧度 np.radians(180) = π

三、指数与对数函数

函数 说明 示例
np.exp(x) e的x次方 np.exp(1) ≈ 2.718
np.exp2(x) 2的x次方 np.exp2(3) = 8
np.log(x) 自然对数 np.log(np.e) = 1
np.log2(x) 以2为底对数 np.log2(8) = 3
np.log10(x) 以10为底对数 np.log10(100) = 2

四、取整与绝对值函数

函数 说明 示例
np.round(x) 四舍五入 np.round(3.5) = 4
np.floor(x) 向下取整 np.floor(3.7) = 3
np.ceil(x) 向上取整 np.ceil(3.2) = 4
np.trunc(x) 截断小数 np.trunc(3.7) = 3

五、三角函数运算示例

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函数 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并行指令,数据量越大优势越明显。


标签: NumPy 数学函数 三角函数 指数对数 Python教程 向量化

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: NumPy广播机制详解 - 不同形状数组运算规则完整教程 下一篇: NumPy统计函数大全 - 均值方差分位数轴计算完整教程

poll相关推荐