Python Numpy Broadcast() 类
Numpy Broadcast() 类模拟了广播机制,并返回一个对象,该对象封装了将一个数组广播到另一个数组的结果。此类以数组作为输入参数。
此类允许对不同形状的数组进行操作,方法是虚拟扩展较小数组以匹配较大数组的形状,而无需在内存中实际创建更大的数组。
语法
numpy.broadcast() 类的语法如下:
numpy.broadcast(*array_like)
参数
Numpy Broadcast() 类以 *array_like 作为输入参数,这些输入数组是需要相互广播的。
返回值
它返回一个 numpy.broadcast 对象,该对象可用于迭代数组。
示例 1
以下是使用 NumpyBroadcast() 类创建广播数组的示例。这里,数组 a 和 b 被广播到一个共同的形状 (3, 3),并逐个元素地进行迭代 -
import numpy as np
scalar = 5
array_1d = np.array([1, 2, 3])
broadcast_obj = np.broadcast(scalar, array_1d)
print("广播的形状:", broadcast_obj.shape)
print("广播的元素:")
for x, y in broadcast_obj:
print(f"({x}, {y})")
输出
广播的形状:(3,) 广播的元素: (5, 1) (5, 2) (5, 3)
示例 2
以下示例展示了如何将一维数组 [1, 2, 3] 与二维数组 [[4], [5], [6]] 进行广播。一维数组在二维数组的第二维上进行广播,并创建一个兼容元素级操作的形状 -
import numpy as np
array_1d = np.array([1, 2, 3])
array_2d = np.array([[4], [5], [6]])
broadcast_obj = np.broadcast(array_1d, array_2d)
print("广播形状:", broadcast_obj.shape)
print("广播元素:")
for x, y in broadcast_obj:
print(f"({x}, {y})")
输出
广播形状:(3, 3) 广播元素: (1, 4) (2, 4) (3, 4) (1, 5) (2, 5) (3, 5) (1, 6) (2, 6) (3, 6)
示例 3
在此示例中,我们将 numpy.broadcast() 类与 Numpy 库的内置广播进行比较 -
import numpy as np
x = np.array([[1], [2], [3]])
y = np.array([4, 5, 6])
# 将 x 广播到 y
b = np.broadcast(x, y)
# 使用 nditer 迭代广播对象
print('将 x 广播到 y:')
for r, c in np.nditer([x, y]):
print(r, c)
print('
')
# Shape 属性返回广播对象的形状
print('广播对象的形状:')
print(b.shape)
print('
')
# 使用广播手动将 x 和 y 相加
b = np.broadcast(x, y)
c = np.empty(b.shape)
print('使用广播手动将 x 和 y 相加:')
print(c.shape)
print('
')
# 手动计算加法
c.flat = [u + v for (u, v) in np.nditer([x, y])]
print('应用 flat 函数后:')
print(c)
print('
')
# 与 NumPy 内置广播支持获得的结果相同
print('x 和 y 的和:')
print(x + y)
输出
广播对象的形状: (3, 3) 使用广播手动将 x 和 y 相加: (3, 3) 应用 flat 函数后: [[5. 6. 7.] [6. 7. 8.] [7. 8. 9.]] x 与 y 的和: [[5 6 7] [6 7 8] [7 8 9]]

numpy_array_manipulation.html