楼主: Aaron1994
44 0

人工智能之数据分析 numpy:第九章 数组运算(二) [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-8-10
最后登录
2018-8-10

楼主
Aaron1994 发表于 2025-11-26 07:00:27 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

人工智能之数据分析 numpy

第九章 数组运算(二)

文章目录

  • 前言
  • 一、三角函数(Trigonometric Functions)
  • 二、双曲函数(Hyperbolic Functions)
  • 三、指数与对数函数
  • 四、舍入函数(Rounding)
  • 五、向量与矩阵函数(线性代数相关)
  • 六、统计相关函数
  • 七、特殊函数(SciPy 更全,但 NumPy 有基础)
  • 八、随机数生成(np.random 模块)
  • 九、性能提示
  • 十、总结:常用函数速查表
  • 后续

前言

NumPy 提供了大量数学和统计相关的通用函数(ufunc),涵盖三角函数、指数对数运算、舍入操作、线性代数计算以及概率统计等多个方面。这些函数均支持向量化处理,能够直接作用于整个数组而无需显式循环,显著提升计算效率。

本文将系统介绍 NumPy 中常用的数学与统计函数,延续上一章节内容进行深入讲解。

三、指数与对数函数

NumPy 支持多种常见的指数和对数运算,适用于科学计算中的数值稳定性需求。

函数说明
np.exp(x)
$e^x$
np.exp2(x)
$2^x$
np.power(x, y)
$x^y$(支持广播)
np.log(x)
自然对数 $\ln x$
np.log2(x)
以 2 为底的对数
np.log10(x)
以 10 为底的对数
np.log1p(x)
$\ln(1 + x)$,在 $x$ 很小时更精确

示例:

import numpy as np
x = np.array([1, 2, np.e])
print("exp:", np.exp(x))          # [2.718..., 7.389..., 15.154...]
print("log(exp(x)):", np.log(np.exp(x)))  # ≈ x

# 使用 log1p 避免小数值精度损失
small = 1e-10
print(np.log(1 + small))   # 可能输出 0.0(精度丢失)
print(np.log1p(small))     # 精确值 ≈ 1e-10
    

一、三角函数(Trigonometric Functions)

所有三角函数默认接收弧度制输入,需注意角度与弧度之间的转换。

函数说明
np.sin(x)
正弦
np.cos(x)
余弦
np.tan(x)
正切
np.arcsin(x)
反正弦
np.arccos(x)
反余弦
np.arctan(x)
反正切
np.hypot(x, y)
计算 $\sqrt{x^2 + y^2}$(直角三角形斜边)
np.deg2rad(x)
角度转弧度
np.radians(x)
同上
np.rad2deg(x)
弧度转角度
np.degrees(x)
同上

示例:

angles_deg = np.array([0, 30, 45, 60, 90])
angles_rad = np.deg2rad(angles_deg)
print("sin:", np.sin(angles_rad))
# 输出: [0.         0.5        0.70710678 0.8660254  1.        ]

# 反函数使用示例(注意定义域限制)
x = np.array([0, 0.5, 1])
print("arcsin (rad):", np.arcsin(x))
print("arcsin (deg):", np.rad2deg(np.arcsin(x)))
# 输出: [0. 30. 90.]
    

注意:

arcsin
arccos
的输入必须位于区间 $[-1, 1]$ 内,否则会返回
nan
(如 NaN)。

二、双曲函数(Hyperbolic Functions)

双曲函数在机器学习激活函数及微分方程求解中具有应用价值。

函数说明
np.sinh(x)
双曲正弦
np.cosh(x)
双曲余弦
np.tanh(x)
双曲正切
np.arcsinh(x)
反双曲正弦
np.arccosh(x)
反双曲余弦
np.arctanh(x)
反双曲正切

四、舍入函数(Rounding)

用于控制浮点数的小数位数或整数化处理。

函数说明
np.around(a, decimals=0)
四舍五入到指定小数位
np.round(a)
同上
np.floor(a)
向下取整(≤ x 的最大整数)
np.ceil(a)
向上取整(≥ x 的最小整数)
np.trunc(a)
截断小数部分(向零取整)
np.fix(a)
同上
np.rint(a)
四舍五入到最近整数,返回 float 类型

示例:

x = np.array([-2.7, -2.3, 2.3, 2.7])
print("round :", np.round(x))    # [-3. -2.  2.  3.]
print("floor :", np.floor(x))    # [-3. -3.  2.  2.]
print("ceil  :", np.ceil(x))     # [-2. -2.  3.  3.]
print("trunc :", np.trunc(x))    # [-2. -2.  2.  2.]
    

补充说明:

np.round()
采用“银行家舍入”规则,即当处于两个整数中间时,舍入至最近的偶数。例如
0.5
会舍入到
np.round(2.5) → 2.0
所表示的偶数值。

五、向量与矩阵函数(线性代数相关)

尽管完整的线性代数功能主要由 numpy.linalg 模块提供,但 NumPy 基础库仍包含若干常用向量与矩阵操作函数,适用于基本的数学运算需求。

np.linalg
表示该部分内容通常归属于专门的线性代数模块,但在实际使用中可通过主命名空间调用部分核心函数。

六、统计相关函数

NumPy 提供丰富的统计分析工具,支持沿指定轴(axis)进行计算。

1. 基础统计量(支持 axis 参数)

  • 均值:np.mean()
  • 标准差:np.std()
  • 方差:np.var()
  • 最小/最大值:np.min(), np.max()
  • 求和:np.sum()
  • 累积和:np.cumsum()

2. 高级统计

  • 中位数:np.median()
  • 百分位数:np.percentile()
  • 相关系数矩阵:np.corrcoef()
  • 协方差矩阵:np.cov()

示例:

data = np.array([[1, 2], [3, 4], [5, 6]])
print("Mean along axis=0:", np.mean(data, axis=0))  # [3. 4.]
print("Median:", np.median(data))
print("Covariance matrix:\n", np.cov(data.T))
    

七、特殊函数(SciPy 更全,但 NumPy 有基础)

虽然 SciPy 提供更为全面的特殊数学函数,但 NumPy 也实现了部分基础功能,如限幅与插值等。

示例:限幅与插值

利用 np.clip() 实现数组元素的上下界限制,或通过 np.interp() 进行一维线性插值。

arr = np.array([1, 2, 3, 4, 5])
clipped = np.clip(arr, 2, 4)  # 将小于2的设为2,大于4的设为4
print(clipped)  # [2 2 3 4 4]

# 插值示例
x = np.array([1, 3, 5])
xp = [1, 2, 3, 4, 5]
fp = [1, 4, 9, 16, 25]  # 对应平方函数
interpolated = np.interp(x, xp, fp)
print(interpolated)  # [1.  4.  9.] (线性近似)
    

八、随机数生成(np.random 模块)

NumPy 的 random 模块可用于生成各种分布下的随机样本,常用于模拟、建模和初始化参数。

  • np.random.rand():均匀分布随机数
  • np.random.randn():标准正态分布
  • np.random.randint():整数随机数
  • np.random.choice():从给定数组中抽样
  • np.random.seed():设置随机种子以保证可重复性

九、性能提示

  • 优先使用向量化操作而非 Python 循环。
  • 避免频繁创建临时数组,合理复用内存。
  • 使用 out 参数就地存储结果以节省内存(如 np.sin(arr, out=arr))。
  • 对于大型数组,考虑使用 dtype 控制精度以减少内存占用。
  • 启用 Numba 或 CuPy 可进一步加速计算密集型任务。

十、总结:常用函数速查表

类别函数示例
三角函数np.sin, np.cos, np.tan, np.arcsin, np.deg2rad
指数/对数np.exp, np.log, np.log1p, np.power
舍入操作np.round, np.floor, np.ceil, np.trunc
统计函数np.mean, np.std, np.median, np.sum
线性代数np.dot, np.matmul, np.linalg.inv
随机数np.random.rand, np.random.randn, np.random.choice

后续

本系列将持续更新关于数据分析中 NumPy、Pandas、Matplotlib 等工具的实际应用技巧与进阶方法,敬请期待下一章节内容。

常用函数概述(主命名空间)

以下为 NumPy 中常用的数学与数组操作函数,均位于主命名空间,可直接调用。

函数 说明
np.dot 计算点积或矩阵乘法
np.vdot 共轭点积,常用于复数向量
np.inner 内积运算,对高维数组沿最后一轴求和
np.outer 外积运算,返回二维矩阵结果
np.cross 向量叉积,适用于 2D 或 3D 向量
np.linalg.norm 计算向量或矩阵的范数,默认为 L2 范数
np.dot(a, b)
np.vdot(a, b)
np.inner(a, b)
np.outer(a, b)
np.cross(a, b)
np.linalg.norm(x, ord=2)

示例代码:

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print("dot   :", np.dot(a, b))      # 输出:32
print("inner :", np.inner(a, b))    # 输出:32
print("outer :\n", np.outer(a, b))
# [[ 4  5  6]
#  [ 8 10 12]
#  [12 15 18]]
print("norm  :", np.linalg.norm(a)) # √14 ≈ 3.7417

六、统计相关函数

1. 基础统计量(支持 axis 参数)

这些函数可用于沿指定轴进行统计计算。

函数 说明
np.sum 数组元素求和
np.mean 计算均值
np.median 中位数
np.std 标准差,默认除以 N(总体标准差)
np.var 方差
np.min, np.max 最小值与最大值
np.argmin, np.argmax 最小值与最大值的索引位置
np.percentile 分位数计算(q 取值范围为 0~100)
np.quantile 分位数计算(q 取值范围为 0~1)
axis
np.sum(a)
np.mean(a)
np.median(a)
np.std(a)
np.var(a)
np.min(a)
np.max(a)
np.argmin(a)
np.argmax(a)
np.percentile(a, q)
np.quantile(a, q)

注意:默认的 np.stdnp.var 使用总体标准差(除以 N)。若需样本标准差(除以 N-1),应设置参数 ddof=1

np.std()
ddof=0
np.std(a, ddof=1)

2. 高级统计函数

适用于更复杂的统计分析任务。

函数 说明
np.cov 计算协方差矩阵
np.corrcoef 生成相关系数矩阵
np.histogram 返回数据的频次分布及边界值(counts 和 bin_edges)
np.bincount 对非负整数数组进行频次统计,类似 one-hot 计数
np.unique 提取唯一值及其出现次数
np.cov(x, y)
np.corrcoef(x, y)
np.histogram(a, bins=10)
np.bincount(x)
np.unique(a, return_counts=True)
np.sign(x)

示例代码:

data = np.array([1, 2, 2, 3, 4, 4, 4])
# 频次统计
values, counts = np.unique(data, return_counts=True)
print("Unique:", values)    # [1 2 3 4]
print("Counts:", counts)    # [1 2 1 3]

# 相关系数
x = np.array([1, 2, 3, 4])
y = np.array([2, 4, 6, 8])
print("Corr coef:", np.corrcoef(x, y)[0, 1])  # 1.0(完全正相关)

七、特殊函数(基础功能,SciPy 更全面)

NumPy 提供了一些常用的数学变换与处理函数。

函数 说明
np.sign 符号函数,返回 -1、0 或 1
np.abs / np.fabs 绝对值计算
np.sqrt 平方根
np.square 平方运算
np.clip 数值限幅(clamp),限制在指定区间内
np.where 根据条件选择元素
np.interp 一维线性插值
np.abs(x)
np.fabs(x)
np.sqrt(x)
np.square(x)
np.clip(a, a_min, a_max)
np.where(condition, x, y)
np.interp(x, xp, fp)

示例:限幅与插值

arr = np.array([-2, -1, 0, 1, 2])
clipped = np.clip(arr, -1, 1)  # 结果:[-1 -1 0 1 1]

# 插值示例:已知 xp=[0,1,2], fp=[0,1,4],求 x=0.5 处的插值
x_new = 0.5
y_new = np.interp(x_new, [0,1,2], [0,1,4])  # 结果:0.5

八、随机数生成(np.random 模块)

该模块广泛应用于统计模拟与数据采样。

# 推荐使用新式随机数生成器
rng = np.random.default_rng(seed=42)
rng.random(5)           # 生成 [0,1) 区间内的均匀分布随机数
rng.normal(0, 1, 1000)  # 从标准正态分布中抽取 1000 个样本
rng.randint(0, 10, 5)   # 生成 5 个 [0,10) 范围内的随机整数
rng.choice([1,2,3], size=5)  # 从给定序列中随机抽样

建议:优先使用 default_rng() 创建的生成器,取代旧式的 np.random.rand 等函数,以获得更好的随机性控制和可重现性。

np.random
Generator
default_rng
np.random.seed()

九、性能优化提示

  • 上述所有函数均为 ufunc(通用函数),底层由 C 实现,具备自动向量化和并行化能力。
  • 避免在 Python 循环中逐个调用这些函数,应直接作用于整个数组以发挥最大性能。
  • 对于超大规模数组,建议采用内存映射(memmap)或分块处理策略,减少内存占用。

十、总结:常用函数速查表

类别 常用函数
三角函数 np.sin, np.cos, np.tan, np.arcsin, np.arctan
指数与对数 np.exp, np.log, np.log10, np.power
舍入操作 np.round, np.floor, np.ceil, np.trunc
向量运算 np.dot, np.cross, np.outer, np.linalg.norm
统计函数 np.sum, np.mean, np.std, np.var, np.median, np.corrcoef
sin
cos
tan
arcsin
deg2rad
exp
log
log10
log1p
round
floor
ceil
trunc
dot
norm
cross
outer
mean
std
median
percentile
unique

掌握这些函数后,你将能够高效地完成科学计算、数据分析、信号处理以及机器学习中的大多数数值任务。对于更复杂的统计建模需求,例如回归分析或假设检验,推荐结合使用 SciPy.statsstatsmodels 等工具库进行扩展。

本文是前一章节的延续,重点讲解了与 NumPy 数组相关的数学运算和统计方法。

corrcoef

目前,Python 过渡项目的部分代码已上传至 Gitee 平台,并将持续更新。由于时间因素限制,进度可能较为缓慢,感兴趣的读者也可自行克隆源码到本地进行学习与功能拓展。

abs

以下是一些值得参考的学习资料:

  • 《Python编程:从入门到实践》
  • 《利用Python进行数据分析》
  • 《算法导论中文第三版》
  • 《概率论与数理统计(第四版)》(盛骤)
  • 《程序员的数学》
  • 《线性代数应该这样学第3版》
  • 《微积分和数学分析引论》
  • 《机器学习》(周志华,俗称“西瓜书”)
  • 《TensorFlow机器学习实战指南》
  • 《Sklearn与TensorFlow机器学习实用指南》
  • 《模式识别(第四版)》
  • 深度学习》(伊恩·古德费洛,又称“花书”)
  • 《Python深度学习第二版(中文版)》(Francois Chollet)
  • 《深入浅出神经网络与深度学习》(迈克尔·尼尔森)
  • 《自然语言处理综论 第2版》
  • 《Natural-Language-Processing-with-PyTorch》
  • 《计算机视觉-算法与应用(中文版)》
  • 《Learning OpenCV 4》
  • 《AIGC:智能创作时代》(杜雨 + 张孜铭)
  • 《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
  • 《从零构建大语言模型(中文版)》
  • 《实战AI大模型》
  • 《AI 3.0》

sign

clip

where

interp

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Numpy 数据分析 人工智能 NUM interpolate

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-31 00:47