Numpy实现向量所有元素两两相减 避免for循环提升运行效率
Numpy无循环实现全元素对差值矩阵
已知输入数组为:
import numpy as np x = np.array( [[0], [1], [2]] )
实现代码
仅需一行即可完成计算,无任何显式for循环:
diff_matrix = x - x.T
输出结果
打印diff_matrix即可得到预期的差值矩阵:
array([[ 0, -1, -2], [ 1, 0, -1], [ 2, 1, 0]])
实现说明
- 该方案依赖Numpy的广播运算特性:形状为
(n, 1)的列向量x和形状为(1, n)的行向量x.T做减法时,会自动将两个数组的维度扩展为(n, n)的匹配维度,最终矩阵的第i行第j位元素刚好对应x[i] - x[j]的差值,完全符合需求的计算规则。 - 运算逻辑由Numpy底层C代码实现,效率远高于Python层级的循环实现,即使输入数组长度达到万级也能快速完成计算。
- 如果你的输入x是一维数组,只需要先调整维度即可,修改为如下代码即可得到同样结果:
diff_matrix = x.reshape(-1, 1) - x
内容的提问来源于stack exchange,提问作者T.W.
相关产品推荐
相关产品推荐

