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
答案 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