2015-09-04 62 views
0

我在一個項目中遇到了一些奇怪的行爲。具體而言,當運行這些代碼:爲什麼數組插入時numpy會立即崩潰?

import numpy as np 

coefficientMatrix = np.zeros([12500, 43750]) 
coefficientMatrix[229, 798] = 1.0942131827 

我的Python程序崩潰:

error message

什麼可以錯在這裏?系統規格(如果與此相關):Windows 7 x64,8Gb的RAM,Python 2.7 32位,numpy 1.9.2。

+2

'它崩潰了'你能張貼完整的痕跡嗎? – arodriguezdonaire

+0

@arodriguezdonaire「它崩潰」我的意思是Windows的「python.exe已停止工作」提示出現。 – Bartvbl

+0

我的系統沒有問題。 Python 2.7(conda-accelerated)5 GB Ram,LInux 3.16.0-46內核。 – Moritz

回答

2

之所以當你將一個元素在coefficientMatrix,而不是當你創建一個使用np.zeros數組,你會得到一個MemoryError,是大多數操作系統(包括Windows 7)使用lazy memory allocation

當您使用np.zeros實例化陣列時,Windows僅分配虛擬內存地址空間而非物理RAM。但是,當你真正嘗試寫入這塊內存時,操作系統將需要找到足夠的物理內存來存放陣列。如果它沒有這樣做,你會得到一個MemoryError

既然你的Python進程是32bit,it can address a maximum of 4GB of memory (and possibly even less)。一個12500x43750的float64值數組將佔用4.375GB的內存,所以你不能擁有一個使用32位Python的數組。