我正在尝试计算从点p
到列表s
中每个点的距离。
import math
s= [(1,4),(4,2),(6,3)]
p= (3,7)
p0,p1=p
dist=[]
for s0,s1 in s:
dist=math.sqrt((p0[0] - p1[0])**2 + (s0[1] - s1[1])**2)
dist= dist+1
print(dist)
TypeError Traceback (most recent call last)
<ipython-input-7-77e000c3374a> in <module>
3 dist=[]
4 for s0,s1 in s:
----> 5 dist=math.sqrt((p0[0] - p1[0])**2 + (s0[1] - s1[1])**2)
6
7
TypeError: 'int' object is not subscriptable
我看到由于p0,p1
是int
个,访问位置已停止。但是在这种情况下,我不知道如何解决这个问题。
答案 0 :(得分:3)
即使您已经将点分隔成x, y
,您还是不小心在数据上使用了索引。此外,您正在覆盖列表,而不保存数据。而且距离公式不正确,应该是点之间的减法而不是加法。试试这个:
import math
s= [(1,4),(4,2),(6,3)]
p= (3,7)
p0,p1=p
dist=[]
for s0,s1 in s:
dist_=math.sqrt((p0 - s0)**2 + (p1 - s1)**2) #Edit this line to [0]s and [1]s
dist_= dist_+1 #Also change name and/or delete
# print(dist)
dist.append(dist_) #Save data to list
答案 1 :(得分:2)
dist=math.sqrt((p0[0] - p1[0])**2 + (s0[1] - s1[1])**2)
在这里,您正在索引整数。
此外,您在计算中犯了错误。应该是:
dist=math.sqrt((p0 - s0)**2 + (p1 - s1)**2)
答案 2 :(得分:2)
如果需要的是距离列表,则可以在一行代码中使用列表理解来完成:
import math
import pprint
s = [(1,2),(3,4),(-1,1),(6,-7),(0, 6),(-5,-8),(-1,-1),(6,0),(1,-1)]
p = (3,-4)
dists = [math.sqrt((p[0]-s0)**2 + (p[1]-s1)**2) for s0, s1 in s]
pprint.pprint(dists)
这里的另一件事是我从OPs代码中删除了dist = dist + 1
。我不认为这是正确的...为什么要在每个计算出的距离上加1?
结果:
[6.324555320336759,
8.0,
6.4031242374328485,
4.242640687119285,
10.44030650891055,
8.94427190999916,
5.0,
5.0,
3.605551275463989]
答案 3 :(得分:1)
也许尝试更改此行:
dist=math.sqrt((p0[0] - p1[0])**2 + (s0[1] - s1[1])**2)
收件人:
dist=math.sqrt((p0 - p1)**2 + (s0 - s1)**2)
答案 4 :(得分:0)
如果您想要欧几里德距离,则可以执行以下操作(即使没有import math
)
s = [(1, 4), (4, 2), (6, 3)]
p = (3, 7)
for point in s:
sum_ = sum((p[i] - point[i]) ** 2 for i in range(len(p)))
distance = sum_ ** (1 / 2) # take the square root, the same thing as math.sqrt()
print(p, point, round(distance, 1))
结果:
(3, 7) (1, 4) 3.6
(3, 7) (4, 2) 5.1
(3, 7) (6, 3) 5.0
您在代码中遇到的错误是因为您在整数上使用了索引。就像这样:
>>> a = 3
>>> a[0]
Traceback (most recent call last):
File "<input>", line 1, in <module>
a[0]
TypeError: 'int' object is not subscriptable
答案 5 :(得分:0)
如果您不受可以使用的软件包的限制。使用 NumPy 的实现会更快。
import numpy as np
s = np.array([(1,4),(4,2),(6,3)])
p = np.array((3,7))
dist = np.linalg.norm(p - s, axis=1)
结果:
array([3.60555128, 5.09901951, 5.])