沿尺寸的距离矩阵

时间:2020-02-19 13:11:29

标签: python numpy

假设我要计算向量中每个元素之间的距离矩阵,可以通过以下方式实现:

X = np.array([1, 2, 3])
dist = np.triu(np.expand_dims(X, 0) - np.expand_dims(X, 1))
# [[0 1 2]
#  [0 0 1]
#  [0 0 0]]

但是,如果X是矩阵,我不确定该怎么做,并且我想计算每个向量的成对距离。例如,假设我具有以下矩阵:

X = np.array([[1, 2, 3], [1, 5, 7],[7, 8, 9]])

我希望得到以下输出:

# [[[0 1 2],
#   [0 0 1],
#   [0 0 0]],
#
#  [[0 4 6],
#   [0 0 2],
#   [0 0 0]],
# 
#  [[0 1 2],
#   [0 0 1],
#   [0 0 0]]]

1 个答案:

答案 0 :(得分:1)

3D扩展数组上使用In [57]: np.triu(X[:,None,:]-X[:,:,None]) Out[57]: array([[[0, 1, 2], [0, 0, 1], [0, 0, 0]], [[0, 1, 2], [0, 0, 1], [0, 0, 0]], [[0, 1, 2], [0, 0, 1], [0, 0, 0]]]) 减去版本-

np.expand_dims

或者使用您的可信赖 np.triu(np.expand_dims(X, 1) - np.expand_dims(X, 2)) -

triu

或者使用np.tri之类的东西创建一个mask = ~np.tri(X.shape[-1], dtype=bool) out = mask*(X[:,None,:]-X[:,:,None]) 遮罩,然后遮罩-

XmlDocument