首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三种不同列表的计算

三种不同列表的计算
EN

Stack Overflow用户
提问于 2022-06-03 10:58:57
回答 3查看 45关注 0票数 0

我有三个不同列表的计算问题。

我有这份清单:

代码语言:javascript
复制
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。我试过这样做:

代码语言:javascript
复制
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。

而不是得到这个错误:

代码语言:javascript
复制
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

有人能帮我吗?谢谢

EN

回答 3

Stack Overflow用户

发布于 2022-06-03 11:11:23

括号放置错误,而for循环的范围在计算坐标之间的距离时略有错误:

代码语言:javascript
复制
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循环的距离。

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2022-06-03 11:04:02

您得到这个错误是因为索引中的+1尝试:

代码语言:javascript
复制
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)) )

我的代码:

代码语言:javascript
复制
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)) )
票数 0
EN

Stack Overflow用户

发布于 2022-06-03 11:19:29

您超出了范围IndexError: list index out of range,因为您从第一个索引开始,并达到第5个索引4,这不在列表中。所以你必须改变这一行

代码语言:javascript
复制
for i in range(len(center_x)):

代码语言:javascript
复制
for i in range(len(center_x) - 1):

另一个提示:在您编写的公式中有一个括号问题,需要正确编写,以避免计算错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72488606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档