Python numpy:“阵列太大了”

时间:2013-07-23 09:02:13

标签: python numpy matrix scipy

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

我想找到:

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

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

而且,我发现可能有重复但是它们的阵列矩阵太大了。

Is it possible to create a 1million x 1 million matrix using numpy? Very large matrices using Python and NumPy

1 个答案:

答案 0 :(得分:1)

首先,您的代码中存在一些拼写错误。它是:

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

当然这个问题无关紧要。

Euclidean 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