943 字
5 分钟
页面浏览--访问次数--
数据分析|ndarray的运算

7.1 数组间的算术运算#

ndarray 最强大的特性之一是支持逐元素的向量化运算——无需手动编写循环,直接对数组使用 +、-、*、/、** 等运算符即可完成对应元素的计算。

一维数组运算#

import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b) # 对应元素相加
print(a - b) # 对应元素相减
print(a * b) # 对应元素相乘
print(a / b) # 对应元素相除
print(a ** 2) # 幂运算

输出:

[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4 0.5 ]
[1 4 9]

与列表的对比#

Python 原生列表的 + 运算是拼接而非逐元素相加:

c = [1, 2, 3]
d = [4, 5, 6]
print(c + d) # 列表直接相加是拼接,而不是对应元素相加

输出:

[1, 2, 3, 4, 5, 6]

如果要对列表逐元素相加,需要用循环:

for i in range(len(c)):
d[i] = c[i] + d[i]
print(d) # 列表对应元素相加

输出:

[5, 7, 9]

对比结论: ndarray 的向量化运算不仅代码更简洁,执行效率也远高于手动循环。

二维数组运算#

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([[4, 5, 6], [7, 8, 9], [1, 2, 3]])
print(a + b) # 对应元素相加
print(a - b) # 对应元素相减
print(a * b) # 对应元素相乘
print(a / b) # 对应元素相除
print(a ** 2) # 幂运算

输出:

[[ 5 7 9]
[11 13 15]
[ 8 10 12]]
[[-3 -3 -3]
[-3 -3 -3]
[ 6 6 6]]
[[ 4 10 18]
[28 40 54]
[ 7 16 27]]
[[0.25 0.4 0.5 ]
[0.57142857 0.625 0.66666667]
[7. 4. 3. ]]
[[ 1 4 9]
[16 25 36]
[49 64 81]]

二维数组的算术运算同样是逐元素进行的,要求两个数组形状相同。


7.2 广播机制#

当两个数组形状不完全相同时,NumPy 会尝试通过**广播机制(Broadcasting)**自动扩展形状,使运算得以进行。

广播规则: 从末尾维度开始逐维度比较,两个维度满足以下条件之一即可广播:

  1. 维度大小相同;
  2. 其中一个维度为 1。
a = np.array([1, 2, 3]) # 形状 (3,)
b = np.array([[4], [5], [6]]) # 形状 (3, 1)
print(a + b) # 广播机制
print(b - a)

输出:

[[5 6 7]
[6 7 8]
[7 8 9]]
[[3 2 1]
[4 3 2]
[5 4 3]]

广播过程图解:

a (1×3) 扩展为: b (3×1) 扩展为:
1 2 3 4 4 4
1 2 3 5 5 5
1 2 3 6 6 6

不能广播的情况:

# a = np.array([1, 2, 3]) # 形状 (3,)
# b = np.array([4, 5]) # 形状 (2,)
# print(a + b) # 报错:形状不兼容,无法广播

7.3 矩阵乘法#

除了逐元素运算,NumPy 还支持线性代数中的矩阵乘法,使用 @ 运算符或 np.dot() 方法。

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([[4, 5, 6], [7, 8, 9], [1, 2, 3]])
print(a @ b) # 矩阵乘法

输出:

[[ 21 27 33]
[ 57 72 87]
[ 93 117 141]]

矩阵乘法计算过程:

a b
1 2 3 4 5 6
4 5 6 7 8 9
7 8 9 1 2 3

结果矩阵第 (i, j) 位置 = a 的第 i 行 与 b 的第 j 列 对应元素相乘再求和。

以结果 (0, 0) 位置为例:

a 第1行: 1 2 3
b 第1列: 4 7 1
1×4 + 2×7 + 3×1 = 4 + 14 + 3 = 21

7.4 本节小结#

本节完成了以下内容:

  • 掌握了 ndarray 的逐元素算术运算(+、-、*、/、**),理解了其与列表运算的本质区别。
  • 理解了广播机制的规则:维度从末尾开始比较,相同或有一方为 1 时可广播。
  • 掌握了矩阵乘法 @ 运算符的使用方法及其计算原理。

下一节我们将学习 NumPy 中的基本数学函数,包括平方根、指数、对数、三角函数等。


数据分析

连载中

第 7 篇,共 21 篇本文属于系列

数据分析|ndarray的运算
https://luq-blog.xyz/posts/2026-07-01-data-notes-07-ndarray-operations/
作者
Luquiescene
发布于
2026-07-01
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

评论

正在加载评论...

最后更新于 ,距今已过 95 天

部分内容可能已过时