我有三个不同列表的计算问题。
我有这份清单:
center_x= [1.340, 8.54065065, 3.718, 5.83]
center_y= [1.672, 1.67, 7.47, 4.71]
center_z= [-0.451, -1.389, 7.523, 8.15]每个列表都有一个空间坐标,即center_x1、center_y1、center_z1,形成一个类型为(x,y,z)的坐标。
我需要计算这些坐标之间的距离,就像这对1-2,2-3,3-4。我试过这样做:
for i in range(len(centro_x)):
print( 'Dists :',(( ((center_x[i+1]-center_x[i]**2)+ center_y[i+1]-center_y[i]**2)+ (center_z[i+1]-center_z[i]**2)) **(1/2)) )但只能计算出第一对,1-2。
而不是得到这个错误:
dist 3.0513998021801334
dist (6.261343210163308e-16+10.225549463768164j)
dist (6.351600500021062e-16+10.372950804171936j)
Traceback (most recent call last):
File "/home/josepinto/Desktop/quadrangular/auxiliar.py", line 81, in <module>
print( 'dist',(( ((centro_x[i+1]-centro_x[i]**2)+ centro_y[i+1]-centro_y[i]**2)+
(centro_z[i+1]-centro_z[i]**2)) **(1/2)) )
IndexError: list index out of range有人能帮我吗?谢谢
发布于 2022-06-03 11:11:23
括号放置错误,而for循环的范围在计算坐标之间的距离时略有错误:
centro_x= [1.340, 8.54065065, 3.718, 5.83]
centro_y= [1.672, 1.67, 7.47, 4.71]
centro_z= [-0.451, -1.389, 7.523, 8.15]
for i in range(len(centro_x)-1):
print( 'Dists :',((centro_x[i+1]-centro_x[i])**2 + (centro_y[i+1]-centro_y[i])**2+ (centro_z[i+1]-centro_z[i])**2) ** (1/2) )由于在打印语句中使用的是i+1,因此当它到达centro_x中的最后一个元素时会引发错误,因为来自那里的i+1没有引用数组中的有效位置;因此出现了错误。
最后,您可以使用numpy.linalg.norm来计算不带for循环的距离。
centro_x= [1.340, 8.54065065, 3.718, 5.83]
centro_y= [1.672, 1.67, 7.47, 4.71]
centro_z= [-0.451, -1.389, 7.523, 8.15]
import numpy as np
centro= np.array([[1.340, 8.54065065, 3.718, 5.83],[1.672, 1.67, 7.47, 4.71],[-0.451, -1.389, 7.523, 8.15]])
dist = np.linalg.norm(np.diff(centro),axis=0)
print(dist)发布于 2022-06-03 11:04:02
您得到这个错误是因为索引中的+1尝试:
for i in range(1,len(center_x)):
print( 'Dists :',(( ((center_x[i-1]-center_x[i]**2)+ center_y[i-1]-center_y[i]**2)+ (center_z[i-1]-center_z[i]**2)) **(1/2)) )我的代码:
center_x= [1.340, 8.54065065, 3.718, 5.83]
center_y= [1.672, 1.67, 7.47, 4.71]
center_z= [-0.451, -1.389, 7.523, 8.15]
for i in range(1,len(center_x)):
print( 'Dists :',(( ((center_x[i-1]-center_x[i]**2)+ center_y[i-1]-center_y[i]**2)+ (center_z[i-1]-center_z[i]**2)) **(1/2)) )发布于 2022-06-03 11:19:29
您超出了范围IndexError: list index out of range,因为您从第一个索引开始,并达到第5个索引4,这不在列表中。所以你必须改变这一行
for i in range(len(center_x)):至
for i in range(len(center_x) - 1):另一个提示:在您编写的公式中有一个括号问题,需要正确编写,以避免计算错误。
https://stackoverflow.com/questions/72488606
复制相似问题