【问题标题】:Python numpy : "Array is too big"Python numpy:“数组太大”
【发布时间】:2013-07-23 09:02:12
【问题描述】:
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

【问题讨论】:

  • 您计算过要分配多少内存吗?
  • 你使用的是 64 位版本的 python 和 numpy 吗?一个 50k x 50k 的数组将使用大约 20Gb 的内存(numpy 默认使用双精度浮点)。

标签: python numpy matrix scipy


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2015-07-05
    • 2019-09-04
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多