如何用简洁方法实现NumPy数组扩展以进行逐元素减法运算?
简便实现NumPy数组扩展与减法运算
先定义原始数组:
import numpy as np a = np.array([[1,2],[3,4]]) b = np.array([[5,6],[7,8],[9,10]])
方法一:显式生成目标数组c和d
- 生成c:将a的每一行重复3次,调整维度到(2,3,2)
c = a[:, np.newaxis, :].repeat(3, axis=1) - 生成d:将b整体重复2次,调整维度到(2,3,2)
d = b[np.newaxis, :, :].repeat(2, axis=0)
之后直接执行c - d即可得到结果。
方法二:利用广播机制直接运算(更高效)
不用显式创建c和d,直接通过扩展维度触发NumPy的广播机制,一步到位:
result = a[:, np.newaxis, :] - b[np.newaxis, :, :]
这里:
a[:, np.newaxis, :]把a从(2,2)转为(2,1,2)b[np.newaxis, :, :]把b从(3,2)转为(1,3,2)
NumPy会自动将两个数组广播成(2,3,2)的形状,直接完成减法运算,既省内存又简化代码。
内容的提问来源于stack exchange,提问作者Gabriel Vasconcelos Fruet
相关产品推荐
相关产品推荐

