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。
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 41 2 3 5 5 51 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 b1 2 3 4 5 64 5 6 7 8 97 8 9 1 2 3结果矩阵第 (i, j) 位置 = a 的第 i 行 与 b 的第 j 列 对应元素相乘再求和。
以结果 (0, 0) 位置为例:
a 第1行: 1 2 3b 第1列: 4 7 11×4 + 2×7 + 3×1 = 4 + 14 + 3 = 217.4 本节小结
本节完成了以下内容:
- 掌握了 ndarray 的逐元素算术运算(
+、-、*、/、**),理解了其与列表运算的本质区别。 - 理解了广播机制的规则:维度从末尾开始比较,相同或有一方为 1 时可广播。
- 掌握了矩阵乘法
@运算符的使用方法及其计算原理。
下一节我们将学习 NumPy 中的基本数学函数,包括平方根、指数、对数、三角函数等。
数据分析
连载中分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 95 天
部分内容可能已过时
评论