假设我要计算向量中每个元素之间的距离矩阵,可以通过以下方式实现:
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]]]
答案 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