NumPy是Python数值计算的基石库,提供强大的工具用于高效的数组操作。本教程深入探讨两个基本概念:算术运算和广播,它们对于编写简洁高效的数值代码至关重要。
目录
1. 算术运算
NumPy将Python的算术运算符(+,-,*,/,//,%,**)无缝扩展到直接对NumPy数组进行操作。这些运算按元素进行,这意味着它们应用于数组中对应的元素。让我们用例子来说明:
import numpy as np
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])
print("加法:", arr1 + arr2) # 输出:[ 6 8 10 12]
print("减法:", arr1 - arr2) # 输出:[-4 -4 -4 -4]
print("乘法:", arr1 * arr2) # 输出:[ 5 12 21 32]
print("除法:", arr1 / arr2) # 输出:[0.2 0.33333333 0.42857143 0.5 ]
print("向下取整除法:", arr1 // arr2) # 输出:[0 0 0 0]
print("取模:", arr1 % arr2) # 输出:[1 2 3 4]
print("幂运算:", arr1 ** arr2) # 输出:[ 1 64 2187 65536]
这种按元素的操作可以轻松扩展到多维数组。
2. 广播
广播是NumPy的一个强大功能,它允许在不同形状的数组之间进行运算,前提是满足特定条件。它消除了显式循环的需要,从而显著提高了性能。广播的核心规则是:
- 规则1:如果数组的维度不相等,则较小数组的形状前面会添加前导1,直到它与较大数组的维度匹配。
- 规则2:如果一个数组的维度大小为1,而另一个数组的维度大于1,则大小为1的维度将被拉伸以匹配较大的维度。
- 规则3:如果数组的维度不同,并且两者的大小都不为1,则会引发
ValueError
。
让我们演示广播:
import numpy as np
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([10, 20, 30])
result = arr1 + arr2 # 广播生效
print(result)
# 输出:
# [[11 22 33]
# [14 25 36]]
在这里,arr2
(形状(3,))被广播以匹配arr1
的形状(2, 3)。arr1
的每一行都与arr2
相加,避免了显式循环。掌握广播对于编写高效且可读的NumPy代码至关重要。始终仔细考虑数组形状以避免意外结果或错误。