1
import numpy
from scipy.spatial.distance import pdist
X = numpy.zeros(50000,25)
C = pdist(X, 'euclidian')

我想找到:

然后 numpy 给出错误:数组太大。

我认为问题在于 C 的数组大小。Pdist 无法创建 (50000,50000) 数组。我不知道为什么 numpy 限制?我可以在 matlab 中运行相同的代码。如何使用数组运行此代码?

而且,我发现可能存在重复,但它们的数组矩阵大小太大。

是否可以使用 numpy 创建 100 万 x 100 万矩阵? 使用 Python 和 NumPy 的非常大的矩阵

4

1 回答 1

1

首先,您的代码中有几个拼写错误。它的:

X = numpy.zeros((50000,25)) # it's a tuple going in
C = pdist(X, 'euclidean') # euclidean with an e

当然,这个问题并不重要。

欧几里得 pdist 只是对 numpy.linalg.norm ( http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.norm.html ) 的调用。这是一个非常通用的功能。如果由于内存限制它在您的情况下不起作用,您始终可以自己创建一些东西。两个 50000 长度的向量不会占用太多内存,这可以进行一对两比较:

np.sqrt(np.sum(np.square(X[0])) + np.sum(np.square(X[1])))

然后你只需要循环整个事情。

希望有帮助,P

于 2013-07-23T09:49:02.103 回答