Python中的多维欧氏距离

2024-10-20 03:44:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想计算两个数组之间的多维欧几里德距离(24维)。我在用核弹。

这是我的代码:

import numpy,scipy;

A=numpy.array([116.629, 7192.6, 4535.66, 279714, 176404, 443608, 295522, 1.18399e+07, 7.74233e+06, 2.85839e+08, 2.30168e+08, 5.6919e+08, 168989, 7.48866e+06, 1.45261e+06, 7.49496e+07, 2.13295e+07, 3.74361e+08, 54.5, 3349.39, 262.614, 16175.8, 3693.79, 205865]);

B=numpy.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151246, 6795630, 4566625, 2.0355328e+08, 1.4250515e+08, 3.2699482e+08, 95635, 4470961, 589043, 29729866, 6124073, 222.3]);

然而,我用scipy.spatial.distance.cdist(A[numpy.newaxis,:],B,'euclidean')来计算欧几里德距离。

但它给了我一个错误

raise ValueError('XB must be a 2-dimensional array.');

我好像不明白。

我查过scipy.spatial.distance.pdist但不知道如何使用它?

还有其他更好的方法吗?


Tags: 代码importnumpy距离错误scipy数组array
3条回答

AB是24-D空间中的2个点。你应该使用scipy.spatial.distance.euclidean

Doc here

scipy.spatial.distance.euclidean(A, B)

也许是^{}

Examples

>>> from scipy.spatial import distance
>>> distance.euclidean([1, 0, 0], [0, 1, 0])
1.4142135623730951
>>> distance.euclidean([1, 1, 0], [0, 1, 0])
1.0

使用任意一个

numpy.sqrt(numpy.sum((A - B)**2))

或者更简单

numpy.linalg.norm(A - B)

相关问题 更多 >