我有一个z值的numpy1d数组,我想计算所有项目组合之间的差异,输出为一个方阵
我知道如何使用cdist计算所有点组合之间的距离,但这并没有给出符号:
例如,如果我的z向量是[1,5,8]
import numpy as np
from scipy.spatial.distance import cdist
z=np.array([1, 5, 8])
z2=np.column_stack((z,np.zeros(3)))
cdist(z2,z2)
给我:
array([[0., 4., 7.],
[4., 0., 3.],
[7., 3., 0.]])
但我想有一些迹象告诉我:
array([[0., 4., 7.],
[-4., 0., 3.],
[-7., -3., 0.]])
我曾想过通过使用np.tril_索引来翻转下三角形的符号来规避问题,但这不起作用,因为我需要以一致的方式对两个向量进行差分(即,如果我对两个或多个向量执行此操作,则总是以相同的顺序对两个向量进行比较),然而,通过翻转符号,我将始终在右上角有正的差异,在左下角有负的差异
我已经计算出使用双迭代器可以得到我想要的答案,尽管我不确定它对于非常大的数组是否最有效
输出:
编辑:实际上,其他两种解决方案的速度大约快50倍:
(如果您不关心符号约定,请删除减号。)
使用numpy阵列广播的简单单线解决方案
输出:
相关问题 更多 >
编程相关推荐