如何高效实现Numpy数组逐行减多行并新增维度?
Numpy高效实现数组逐行批量减法
现有形状为(x, y)的Numpy数组A,和包含100个行向量的数组B(形状为(100, y)),需要让A的每一行分别减去B的每一行,最终得到形状为(x, y, 100)的结果数组。
你提供的循环拼接方法效率较低,尤其是当数组规模较大时,可利用Numpy的广播机制实现高效运算,无需Python级循环:
实现代码
import numpy as np # 假设A形状为(x, y),B形状为(100, y) # 扩展维度后利用广播完成批量减法 result = A[:, :, np.newaxis] - B.T[np.newaxis, :, :]
原理说明
- Numpy广播会自动匹配维度:A扩展后的
(x, y, 1)与B转置并扩展后的(1, y, 100),会被广播为(x, y, 100)的形状,直接完成逐元素减法运算。 - 这种方式依托Numpy底层C实现的向量运算,比Python循环的效率高出几个数量级,且内存占用更优。
结果验证
运行代码后,可通过print(result.shape)确认输出形状为(x, y, 100)。
内容的提问来源于stack exchange,提问作者JobHunter69
相关产品推荐
相关产品推荐

