我写了这段代码来计算距离。但是得到了ValueError: math domain error
的错误。
import math
a=[[5, 10],
[16, 23]]
b=[[6, 1], [21, 2]]
dL=[]
dist=[]
k=0
h=1
for i in range(len(a)):
dL=[]
for j in range(len(a)):
d=math.sqrt((a[i][k]-b[j][k])^2 + (a[i][h]-b[j][h])^2)
dL.append(d)
dist.append(dL)
在迭代中,d
应该是:
i=0, j=0: d=sqrt((5-6)^2+(10-1)^2)
i=0, j=1: d=sqrt((5-21)^2+(10-2)^2)
i=1, j=0: d=sqrt((16-6)^2+(23-1)^2)
i=1, j=1: d=sqrt((16-21)^2+(23-2)^2)
发布于 2017-04-24 23:54:32
len(a)
的值是2,对于count从0开始,因此,请求数组中的第三个元素,您必须这样做
for i in range(len(a) - 1):
发布于 2017-04-25 00:03:50
当您尝试将sqrt与负数一起使用时,sqrt会显示该错误。sqrt(-16)给出了这个错误,因为结果是一个复数。
from math import sqrt
a=[[5, 10], [16, 23]]
b=[[6, 1], [21, 2]]
dL=[]
dist=[]
k=0
h=1
for i in range(len(a)):
dL=[]
for j in range(len(a)):
temp1 = (a[i][k]-b[j][k]) ** 2
temp2 = (a[i][h]-b[j][h]) ** 2
temp = temp1 + temp2
if temp > 0:
d = sqrt(temp)
dL.append(d)
dist.append(dL)
发布于 2017-04-25 00:45:03
正如@not_a_robot在他们的评论中提到的那样,Python中的求幂运算符是**
而不是^
,因为它在(许多)其他编程语言中是^
。您可以通过简单地替换它们来修复。
import math
a= [[ 5, 10],
[16, 23]]
b= [[ 6, 1],
[21, 2]]
dL=[]
dist=[]
k=0
h=1
for i in range(len(a)):
dL=[]
for j in range(len(a)):
d = math.sqrt((a[i][k]-b[j][k])**2 + (a[i][h]-b[j][h])**2)
dL.append(d)
dist.append(dL)
正如我在评论中提到的,使用math.hypot()
会更好,因为它会更快地给出相同的结果,并且更容易阅读(和写入):
for i in range(len(a)):
dL=[]
for j in range(len(a)):
d = math.hypot(a[i][k]-b[j][k], a[i][h]-b[j][h])
dL.append(d)
dist.append(dL)
https://stackoverflow.com/questions/43592482
复制相似问题