[英]MemoryError trying to convert Numpy 2D arrays into a 3D array
我在將一定數量(在本例中為153個)的Numpy 2D數組轉換為3D數組時遇到麻煩(這些2D數組代表灰度圖像-即2048x2048x1-以處理圖像序列而不是一組2D圖像)。 我需要它來獲取隨時間變化的每個像素值形成的信號(解決此問題后,使用Numpy應該很方便)。
我的代碼是(幾乎)以下內容:
zdim = len(imglist) # 'imglist' a Python list of the path for each image I need to process
windowspan = 512
xmin = ymin = 2
xmax = ymax = xmin + windowspan
sequence = []
for i in range(zdim):
hdulist = fits.open(imglist[i],'readonly') # allow to open FITS image files
hdr = hdulist[0].header['DATE-OBS'] # fetch the image date/time
img = fc.readfitsimg(imglist[i]) # return a np ndarray (2D)
patch = img[ymin:ymax, xmin:xmax] # take a small of the original image
print("patchSize : " + str(patch.size*4))
sequence.append(patch) # adding to the list
print("it : " + str(i))
sequence = np.array(sequence) # transform to numpy array
約85次迭代后,解釋器將返回MemoryError。
任何人都會對發生的事情有任何暗示嗎? (請參閱下面的一些詳細信息)
其他一些細節:-我使用WinPython 32位(便攜式),因為我無法安裝“適當的” Python發行版(出於測試目的,我在Python 2.7.9.4和3.4.3.3之間進行了切換)-我被迫使用32位Windows 7,在一台具有4GB,因此3.5GB可用的PC上,我嘗試在另一台計算機上執行腳本(Win7 64位,16GB RAM)
感謝您為我提供的任何幫助。
當計算機的RAM內存不足時,將發生MemoryError 。 在這種情況下,當您達到85x512x512的限制時,將所有圖像添加到多維數據集中時似乎用完了。 如果這是代碼的唯一問題,我建議使用memmap將結果直接保存到硬盤驅動器而不是RAM中。 當您打開擬合文件fits.open(..., memmap=True)
時,memmap選項也可用。 在這種情況下,僅打開光盤中的映像,然后讀取所需的部分,而不是將整個映像加載到RAM中。
但是我懷疑這里的真正問題是,您一直在打開fits文件而在循環末尾沒有任何關閉(對於您的情況為hdu.close())。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.