2016-12-05 55 views
-2
from PIL import Image 
import numpy as np 
from math import sqrt 
import numpy 

im1 = Image.open("C:\Users...l8\B2.TIF") 
im2 = Image.open("C:\Users\...l8\B3.TIF") 
im3 = Image.open("C:\Users\.....\l8\B4.TIF") 
im4 = Image.open("C:\Users\.........\l8\B8.TIF") 
im1 = im1.resize((im4.size[0], im4.size[1]), Image.ANTIALIAS) 
im2 = im2.resize((im4.size[0], im4.size[1]), Image.ANTIALIAS) 
im3 = im3.resize((im4.size[0], im4.size[1]), Image.ANTIALIAS) 
arr1 = np.array(im1) 
arr2 = np.array(im2) 
arr3 = np.array(im3) 
arr4 = np.array(im4) 

V1=(arr1+arr2-2*arr3) 
V2=(arr1-arr2) 
y= sqrt(2) 
x= sqrt(6) 
x1 = [[None for col in range(V1.shape[0])] for row in range(V1.shape[1])] 
y1 = [[None for col in range(V1.shape[0])] for row in range(V1.shape[1])] 




for i in range(V1.shape[0]): 
     for j in range(V1.shape[1]): 
      x1[i][j] = (V1[i][j])/x 
      y1[i][j] = (V2[i][j])/y 

我有以下錯誤 回溯(最近通話最後一個): 文件 「C:\用戶\ shaheera \桌面\ ihs.py」 35行,在 X1 [ i] [j] =(V1 [i] [j])/ X IndexError:列表分配索引超出範圍如何解決以下錯誤在Python

回答

0

不知道是什麼錯誤(壓痕似乎有可能),但你真的不當你已經有一個numpy數組時,需要返回到列表理解。

只是做

V1=(arr1+arr2-2*arr3) 
V2=(arr1-arr2) 
x1=V1/np.sqrt(6) 
y1=V2/np.sqrt(2) 
+0

@Danial與UR解決方案我想和得到了錯誤回溯(最近通話最後一個): 文件 「C:\用戶\桌面\ ihs.py」,第20行,在 X1 = V1/np.sqrt (6) MemoryError – Joel

+0

輸入文件大小爲100MB – Joel

+0

您可能會在內存中存儲太多內容並耗盡內存。在不計算V1的情況下,嘗試直接進入'x1 =(arr1 + arr2-2 * arr3)/ np.sqrt(6)'。或關閉一些其他程序。 –

0

至於你的列表理解,你有你的列表索引倒退。在最後兩行切換i和j。

x1[i][j](X1 [I]) [j]時,但i是長度V1.shape[0]和外列表是長度V1.shape[1]

但是你可能仍然會有內存錯誤。