【发布时间】:2012-03-13 22:58:10
【问题描述】:
我想计算 2 个数组之间的多维(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但是不明白怎么用?
还有其他更好的方法吗?
【问题讨论】:
-
那么,你有 2、24 维点?在这种情况下,@Mr.E 的回答是最好的选择。但是,当你有超过 2 个点时,各种
scipy.spatial.distance函数会更高效。 -
我想也许我错过了什么。如果可以解决您的问题,则作为答案发布。
-
我想谈谈你很久以前收到的错误,它可能会帮助其他有需要的人。从文档中读取数组 A 和 B 需要具有相同的维度。这意味着如果您的第一个数组 A 具有二维形状(就像您使用
A[numpy.newaxis,:]定义的那样),那么您的第二个数组也需要具有相同的维度。因此,写B[numpy.newaxis,:]应该可以解决错误。 -
@JoeKington 谁是 Mr.E!? :)
标签: python numpy scipy cluster-analysis euclidean-distance