[英]Distance matrix along a dimension
假设我想计算向量中每个元素之间的距离矩阵,我可以通过以下方式进行:
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]]]
在3D
扩展数组减法版本上使用np.triu
-
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))
或者用类似np.tri
东西创建一个triu
掩码,然后掩码 -
mask = ~np.tri(X.shape[-1], dtype=bool)
out = mask*(X[:,None,:]-X[:,:,None])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.