簡體   English   中英

MemoryError試圖將Numpy 2D數組轉換為3D數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM