一个数组中一个点与其余点之间的距离

3
我正在编写一些代码来计算一个点与同一数组中其余点之间的真实距离。该数组保存了空间中粒子的位置。其中包含N个粒子,因此数组的形状为(N,3)。我选择一个粒子,并计算该粒子与其它粒子之间的距离,均在同一数组中。
请问有没有人知道如何实现这一功能?
目前我所拥有的代码如下:
xbox = 10
ybox = 10
zbox = 10
nparticles =15
positions = np.empty([nparticles, 3])
for i in range(nparticles):
     xrandomalocation = random.uniform(0, xbox)
     yrandomalocation = random.uniform(0, ybox)
     zrandomalocation = random.uniform(0, zbox)
     positions[i, 0] = xrandomalocation
     positions[i, 1] = yrandomalocation
     positions[i, 2] = zrandomalocation

这大致就是我现在所拥有的全部内容。我在考虑使用np.linalg.norm,但我完全不知道如何将其实现到我的代码中(或者在循环中使用它)。


2
你能放一些你尝试过的代码吗?至少是数组部分? - Ankush Rathi
这个问题中的第一行是否有帮助? - user202729
欢迎来到StackOverflow!请阅读有关如何提问(特别是如何创建良好的示例)的内容,以获得良好的回复。在您的情况下,发布一个样本数组和期望的输出将非常有用。 - Alex
2
看起来你想让我们为你编写一些代码。虽然很多用户愿意帮助有困难的程序员编写代码,但他们通常只会在发帖者已经尝试过自己解决问题时才提供帮助。展示这种努力的好方法是包括你已经编写的代码、示例输入(如果有的话)、期望输出以及实际得到的输出(控制台输出、跟踪等)。提供的细节越多,你可能会收到更多的答案。请查看[FAQ]和[ask]。 - Isma
@user202729 我已经添加了我现在拥有的内容。 - kamilsparrow
@Isma 我已经添加了一些代码部分 :) 谢谢! - kamilsparrow
2个回答

6

看起来你可能需要使用 scipy.distance.cdist 或者 scipy.distance.pdist。比如,要获取点 Xcoords 中每个点的距离:

>>> from scipy.spatial import distance
>>> X = [(35.0456, -85.2672)]
>>> coords = [(35.1174, -89.9711),
...           (35.9728, -83.9422),
...           (36.1667, -86.7833)]
>>> distance.cdist(X, coords, 'euclidean')
array([[ 4.70444794,  1.6171966 ,  1.88558331]])

pdist类似,但只接受一个数组,您将获得所有对之间的距离。


0

我正在使用这个函数:

from scipy.spatial import distance

def closest_node(node, nodes):
    closest = distance.cdist([node], nodes)
    index = closest.argmin()
    euclidean = closest[0]
    return nodes[index], euclidean[index]

node 是您想要与称为 nodes 的点数组进行比较的空间中的单个点。它返回该点及其到原始node的欧几里得距离。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接