Python 内存不足

Python 内存不足,python,memory,numpy,Python,Memory,Numpy,我有两个变量,x和y。x是 类型(x)= 类型(y)= x.shape=(869250,1) y.shape=(869250,) x+y提供了一个记忆错误,尽管我有大约5GB的空闲空间。这似乎很奇怪——有人知道会发生什么吗 这是64位Linux上的numpy 1.5.1和python 2.7。您是否尝试过检查每个阵列需要多少内存? 好。。。编辑以在此处包含注释: In [14]: b = np.random.random((2,3)) In [16]: b.itemsize*b.size Ou

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

类型(x)=

类型(y)=

x.shape=(869250,1)

y.shape=(869250,)

x+y提供了一个记忆错误,尽管我有大约5GB的空闲空间。这似乎很奇怪——有人知道会发生什么吗


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

您是否尝试过检查每个阵列需要多少内存? 好。。。编辑以在此处包含注释:

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

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

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)
这是一个有点不直观的应用程序。您的结果实际上将是
869250 x 869250
,在可能默认的
np.float64
中总共有5.5 TB的存储空间


您更可能需要向量和。如果您想将
x
保持为
矩阵(这通常会让人困惑,但是…),您可以执行类似
x+y.reformate(-1,1)
sys.getsizeof
不适用于numpy数组
x.size*x.itemsize
可以做到这一点。