【问题标题】:Numpy out of memorynumpy 内存不足
【发布时间】:2012-09-12 21:00:48
【问题描述】:

我有两个变量,x 和 y。 x 是

type(x) = <class 'numpy.matrixlib.defmatrix.matrix'>

type(y) = <type 'numpy.ndarray'>

x.shape = (869250, 1)

y.shape = (869250,)

x+y 给出了 MemoryError,尽管我有大约 5 GB 的可用空间。这似乎很奇怪 - 有人知道可能发生了什么吗?

这是 64 位 Linux 上的 numpy 1.5.1、python 2.7。

【问题讨论】:

    标签: python memory numpy


    【解决方案1】:

    你确定你正在做你想做的事吗?

    In [2]: x = np.random.normal(size=(500,1))
    
    In [3]: y = np.random.normal(size=(500,))
    
    In [4]: (x + y).shape
    Out[4]: (500, 500)
    

    这是numpy's broadcasting rules 的一个有点不直观的应用。您的结果实际上将是 869250 x 869250,在可能默认的 np.float64 中总共有 5.5 TB 的存储空间。

    您更有可能需要向量和。如果您想将x 保留为matrix(这通常令人困惑,但是...),您可以执行x + y.reshape(-1, 1) 之类的操作。

    【讨论】:

      【解决方案2】:

      您是否尝试过检查每个数组需要多少内存? 好吧...编辑以在此处包含评论:

      In [14]: b = np.random.random((2,3))
      
      In [16]: b.itemsize*b.size
      Out[16]: 48
      
      
      In [17]: b = np.random.random((200,3))
      
      In [18]: b.itemsize*b.size
      Out[18]: 4800
      

      现在想象一下,结果也需要一个地方来保存...

      你没有在你的numpy数组中写出什么样的数据,但是如果每一项都是8字节,那么,你的第一项(x)已经很胖了:

      In [19]: 869250*8/1024 # the output is the size in KB ...
      Out[19]: 6791
      

      【讨论】:

      • sys.getsizeof 不适用于 numpy 数组; x.size * x.itemsize 会这样做。
      猜你喜欢
      • 1970-01-01
      • 2014-10-15
      • 2012-02-15
      • 1970-01-01
      • 2011-05-21
      • 2021-12-20
      • 2021-10-29
      • 1970-01-01
      • 2020-03-12
      相关资源
      最近更新 更多