mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7mobile wallpaper 8mobile wallpaper 9mobile wallpaper 10mobile wallpaper 11mobile wallpaper 12mobile wallpaper 13mobile wallpaper 14mobile wallpaper 15mobile wallpaper 16mobile wallpaper 17mobile wallpaper 18mobile wallpaper 19mobile wallpaper 20mobile wallpaper 21mobile wallpaper 22mobile wallpaper 23
627 字
2 分钟
笔记|数据分析学习笔记07|ndarray的运算

本系列所有文章都放在数据科学标签,总目录如下:

合集|数据分析学习笔记|系列总目录

上一篇:笔记|数据分析学习笔记06|索引与切片


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 中的基本数学函数,包括平方根、指数、对数、三角函数等。

下一篇:笔记|数据分析学习笔记08|基本数学函数


分享

如果这篇文章对你有帮助,欢迎分享给更多人!

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

部分信息可能已经过时

目录