如何确定Python中的多维核距离?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (157)

我想要计算两个数组之间的多维(24维)的核距离。我用的是Numpy-Scipy。

这是我的代码:

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但不知道怎么用?

还有其他更好的方法吗?

提问于
用户回答回答于

可以参考:https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.euclidean.html#scipy.spatial.distance.euclidean

实例空间导入距离>距离。1,0,0,0,1,0)1.4142135623730951>距离。1,1,0,0,1,0)1.0

用户回答回答于

我只想指出,在这里可以通过精简来完成一些非常简单的事情。

def n_dimensional_euclidean_distance(a, b):
   """
   Returns the euclidean distance for n>=2 dimensions
   :param a: tuple with integers
   :param b: tuple with integers
   :return: the euclidean distance as an integer
   """
   dimension = len(a) # notice, this will definitely throw a IndexError if len(a) != len(b)

   return sqrt(reduce(lambda i,j: i + ((a[j] - b[j]) ** 2), range(dimension), 0))

这将把所有对(A)相加。J-bJ)^2对于维数中的所有j(注意,为了简单起见,这不支持n<2维距离)。

扫码关注云+社区

领取腾讯云代金券