如何解决以下错误在Python
问题描述:
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
答
不知道是什么错误(压痕似乎有可能),但你真的做不当你已经有一个numpy数组时,需要返回到列表理解。
只是做
V1=(arr1+arr2-2*arr3)
V2=(arr1-arr2)
x1=V1/np.sqrt(6)
y1=V2/np.sqrt(2)
答
至于你的列表理解,你有你的列表索引倒退。在最后两行切换i和j。
x1[i][j]
是(X1 [I]) [j]时,但i是长度V1.shape[0]
和外列表是长度V1.shape[1]
。
但是你可能仍然会有内存错误。
@Danial与UR解决方案我想和得到了错误回溯(最近通话最后一个): 文件 “C:\用户\桌面\ ihs.py”,第20行,在 X1 = V1/np.sqrt (6) MemoryError –
Joel
输入文件大小为100MB – Joel
您可能会在内存中存储太多内容并耗尽内存。在不计算V1的情况下,尝试直接进入'x1 =(arr1 + arr2-2 * arr3)/ np.sqrt(6)'。或关闭一些其他程序。 –