【发布时间】:2015-03-01 03:42:49
【问题描述】:
我有一组 3D 点,我需要在其中找到每个点与所有其他点的距离。到目前为止,我想出了如下代码来计算两个连续(按数组顺序)点之间的距离,但无法弄清楚如何计算每个点与所有其他点的距离。每个点将有 9 个距离(还有 9 个其他点),因此 10 个点总共有 45 个距离(90 的一半)。到目前为止,我只找到了 9 个距离。知道如何使用 python 有效地获得所有距离吗?
import numpy as np
import scipy as sp
rij_mat = np.zeros((9,1),dtype=np.float32) """created a 9x1 matrix for storing 9 distances for 10 points"""
npoints = 10
x = sp.randn(npoints,3)
print "here are the 3-d points..."
print x
for i in xrange(npoints-1):
rij_mat[i] = np.linalg.norm(x[i+1]-x[i])
print "the distances are..."
print rij_mat
我现在的输出是这样的:
here are the 3-d points...
[[-0.89513316 0.05061497 -1.19045606]
[ 0.31999847 -0.68013916 -0.14576028]
[ 0.85442751 -0.64139512 1.70403995]
[ 0.55855264 0.56652717 -0.17086825]
[-1.22435021 0.25683649 0.85128921]
[ 0.80310031 0.82236372 -0.40015387]
[-1.34356018 1.034942 0.00878305]
[-0.65347726 1.1697195 -0.45206805]
[ 0.65714623 -1.07237429 -0.75204526]
[ 1.17204207 0.89878048 -0.54657068]]
the distances are...
[[ 1.7612313 ]
[ 1.92584431]
[ 2.24986649]
[ 2.07833028]
[ 2.44877243]
[ 2.19557977]
[ 0.84069204]
[ 2.61432695]
[ 2.04763007]]
【问题讨论】:
-
您没有 90 个独特的距离。其中一半是重复计算,所以你只有 45 个。
-
对不起,你是对的。将有 45 个距离。
标签: python