【问题标题】:how to solve following error in python如何解决python中的以下错误
【发布时间】:2016-12-05 11:12:27
【问题描述】:
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:\Users\shaheera\Desktop\ihs.py”,第 35 行,在 x1[i][j] = (V1[i][j])/x IndexError: 列表赋值索引超出范围

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    不确定错误是什么(可能会出现缩进),但是当您已经有一个 numpy 数组时,真的不需要返回列表理解。

    做吧

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

    【讨论】:

    • @Danial 与您的解决方案我尝试并得到错误 Traceback(最近一次调用最后):文件“C:\Users\Desktop\ihs.py”,第 20 行,在 x1 = V1/np.sqrt(6) 内存错误
    • 输入文件大小为100MB
    • 您可能在内存中保存了太多东西并且内存不足。尝试直接转到x1=(arr1+arr2-2*arr3)/np.sqrt(6) 而不计算 V1。或者关闭一些其他程序。
    • 再次出现内存错误...当我执行 x1=(arr1+arr2-2*arr3) 时,它运行良好。 bt 一旦我将它除以 np.sqrt(6),就会出现内存错误
    • 设置x=1/sqrt(6) 并改为乘法。修复缩进错误后,您的原始代码是否有效?原数组的元素是整数吗?
    【解决方案2】:

    至于您的列表理解,您的列表索引倒退了。在最后两行中切换 i 和 j。

    x1[i][j] 是 (x1[i])[j],但 i 的长度是 V1.shape[0],而外部列表的长度是 V1.shape[1]。

    但是您可能仍然会遇到内存错误。

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2015-07-04
      相关资源
      最近更新 更多