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]]