如何计算与列表中的点之间的距离?

2024-05-16 09:38:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两组列表,A和O,它们都有x,y,z坐标的点。我想计算A点和B点之间的距离。我用了一个for循环,但它只给出一个结果。结果应该是8个数字。我很感激有人能来看看。这是我项目的最后一步。在

Ax = [-232.34, -233.1, -232.44, -233.02, -232.47, -232.17, -232.6, -232.29, -231.65] 
Ay = [-48.48, -49.48, -50.81, -51.42, -51.95, -52.25, -52.83, -53.63, -53.24] 
Az = [-260.77, -253.6, -250.25, -248.88, -248.06, -247.59, -245.82, -243.98, -243.76]
Ox = [-302.07, -302.13, -303.13, -302.69, -303.03, -302.55, -302.6, -302.46, -302.59] 
Oy = [-1.73, -3.37, -4.92, -4.85, -5.61, -5.2, -5.91, -6.41, -7.4] 
Oz = [-280.1, -273.02, -269.74, -268.32, -267.45, -267.22, -266.01, -264.79, -264.96]
distance = []
for xa in A1:
    for ya in A2:
        for za in A3:
            for x1 in o1:
                for y1 in o2:
                    for z1 in o3:
                        distance += distance
                        distance = (((xa-x1)**2)+((ya-y1)**2)+((za-z1)**2))**(1/2)  
print(distance)

Tags: 项目in距离列表for数字axdistance
3条回答

你需要附加到距离而不是指定它。您应该在for循环中执行以下操作: distance.append((((xa-x1)**2)+((ya-y1)**2)+((za-z1)**2))**(1/2))

你的第一个问题是:

distance = (((xa-x1)**2)+((ya-y1)**2)+((za-z1)**2))**(1/2)

尽管您将距离定义为列表。您将用一个值替换一个值列表。你想要的是

^{2}$

它将把这个值添加到列表的末尾。在

第二件事:你的工作流程可以改进。不要使用那么多for循环,试着这样做:你知道A1A2A3o1o2、和{}的长度相同,因此:

distance = []
for i in range(len(A1)): # will run 8 times because the length of A1 is 8
    xa, ya, za = A1[i], A2[i], A3[i] # these values correspond to each other
    xb, yb, zb = o1[i], o2[i], o3[i] # all are in the same position in their respective list
    distance.append((((xa-x1)**2)+((ya-y1)**2)+((za-z1)**2))**(1/2))
print distance

其他人已经为你眼前的问题提供了解决方案。我还建议您开始使用numpy,并避免所有这些for循环。NUMPY提供了对代码进行矢量化的方法,基本上卸载了需要对非常高效的C++实现进行的所有循环。例如,可以用以下矢量化实现替换整个嵌套For循环:

import numpy as np

# Convert your arrays to numpy arrays
Ax = np.asarray(Ax)
Ay = np.asarray(Ay)
Az = np.asarray(Az)
Ox = np.asarray(Ox)
Oy = np.asarray(Oy)
Oz = np.asarray(Oz)
# Find the distance in a single, vectorized operation
np.sqrt(np.sum(((Ax-Ox)**2, (Ay-Oy)**2, (Az-Oz)**2), axis=0))

相关问题 更多 >