Python的NumPy库中,广播(broadcasting)是一种强大的机制

广播 (Broadcasting)

在Python的NumPy库中,广播(broadcasting)是一种强大的机制,它允许对不同形状的数组进行算术运算。广播使得较小的数组能够与较大的数组进行兼容操作,而无需显式地复制数据。

广播规则

  1. 如果两个数组的维度数不相同,则将较小维度的数组的形状前面补1,直到两个数组的维度数相同。
  2. 从最后一个维度开始比较两个数组的形状:
    • 如果两个维度相等,或者其中一个维度为1,则认为这两个维度是兼容的。
    • 如果两个维度不相等且都不为1,则这两个数组不兼容,无法进行广播。
  3. 对于每个维度,如果一个数组在该维度上的大小为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]]

这样,你可以更明确地控制广播的行为。

猜你喜欢

转载自blog.csdn.net/2301_79810514/article/details/143279438