繁体   English   中英

沿维度的距离矩阵

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM