广播 (Broadcasting)
在Python的NumPy库中,广播(broadcasting)是一种强大的机制,它允许对不同形状的数组进行算术运算。广播使得较小的数组能够与较大的数组进行兼容操作,而无需显式地复制数据。
广播规则
- 如果两个数组的维度数不相同,则将较小维度的数组的形状前面补1,直到两个数组的维度数相同。
- 从最后一个维度开始比较两个数组的形状:
- 如果两个维度相等,或者其中一个维度为1,则认为这两个维度是兼容的。
- 如果两个维度不相等且都不为1,则这两个数组不兼容,无法进行广播。
- 对于每个维度,如果一个数组在该维度上的大小为1,另一个数组在该维度上的大小不为1,那么该维度上的大小将被扩展为较大数组在该维度上的大小。
示例
import numpy as np# 创建一个1维数组和一个2维数组
a = np.array([1, 2, 3])
b = np.array([[4], [5], [6]])# 使用广播进行加法运算
result = a + b
print(result)输出:[[ 5 6 7][ 6 7 8][ 7 8 9]]在这个例子中:- `a` 是一个形状为 (3,) 的一维数组。
- `b` 是一个形状为 (3, 1) 的二维数组。根据广播规则:- `a` 被扩展为形状 (1, 3)。
- `b` 保持不变。最终,它们的形状变为 (1, 3) 和 (3, 1),通过广播机制,它们可以相加,结果是一个形状为 (3, 3) 的二维数组。### 注意事项广播虽然强大,但也可能带来意外的结果,特别是在处理高维数组时。因此,在使用广播时要特别小心,确保理解其行为。可以通过 `np.broadcast_to` 函数手动控制广播行为,例如将一个数组扩展到特定形状。```python
c = np.broadcast_to(a, (3, 3))
print(c)输出:[[1 1 1]
[2 2 2]
[3 3 3]]这样,你可以更明确地控制广播的行为。