繁体   English   中英

在多维矩阵中计算距离

[英]Calculate distances in multi-dimensional matrix

我写了这段代码来计算距离。 但是出现ValueError: math domain error错误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)

len(a)值为2,并且FOR count从0开始,因此,要求数组中的第三个元素,您必须
for i in range(len(a) - 1):

当您尝试使用负数时,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)

作为@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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM