【问题标题】:List indices must be integers, not tuple?列表索引必须是整数,而不是元组?
【发布时间】:2015-06-28 18:44:52
【问题描述】:

我得到了一个 .mat 文件,它是 1024*1024*360,即 3D 对象。我已将数据分成三个 .mat 文件 A、B 和 C。它们三个都是 1024*1024*120 。我将它们加载到矩阵“垫子”中,即 1024*360 。我正在一一加载它们,然后删除它们以腾出空间。基本上它只是点 240 处 3D 对象的 2D 切片。稍后我试图绘制图像。以下是我的代码:

import scipy.io 

import numpy as np
mat = np.zeros((1024,360))

x = scipy.io.loadmat('/home/imaging/Desktop/PRAKRITI/Project/A.mat')  
x = x.values()           
mat[:,0:120]= x[240,:,:]
del x


y = scipy.io.loadmat('/home/imaging/Desktop/PRAKRITI/Project/B.mat')
y = y.values()
mat[:,120:240]= y[240,:,:]
del y


z = scipy.io.loadmat('/home/imaging/Desktop/PRAKRITI/Project/C.mat')
z = z.values()
mat[:,240:360]= z[240,:,:]
del z


import matplotlib.py as plt
imageplot = plt.imshow(matrix)

我收到此错误:

mat[:,0:120]= x[240,:,:]
TypeError: List indices must be integers, not tuple

谁能建议我在这里做错了什么?

【问题讨论】:

  • 你希望x = scipy.io.loadmat('/home/imaging/Desktop/PRAKRITI/Project/A.mat'); x = x.values() 产生什么?
  • 当我运行它时,它会产生 A 中的所有值。但我希望将所有这些值加载到矩阵垫中。
  • 你能确定是mat[:,0:120]还是x[240,:,:]有问题吗?
  • 不应该是mat[:,0:120]= x[240,:,0]吗?
  • 我认为 x[240,:,:] 本身就是问题,因为当我尝试单独打印时,它仍然显示相同的错误。

标签: python python-2.7


【解决方案1】:

您必须从原始 x 矩阵创建一个 numpy 数组。 这就是为什么普通的python数组不接受numpy类型的花式索引,比如matrix[x,y,z]只像matrix[x][y][z]。

import scipy.io 

import numpy as np
mat = np.zeros((1024,360))

x = scipy.io.loadmat('/home/imaging/Desktop/PRAKRITI/Project/A.mat')  
x = np.array((x.values()))
mat[:,0:120]= x[240,:,:]
del x


y = scipy.io.loadmat('/home/imaging/Desktop/PRAKRITI/Project/B.mat')
y = np.array((y.values()))
mat[:,120:240]= y[240,:,:]
del y


z = scipy.io.loadmat('/home/imaging/Desktop/PRAKRITI/Project/C.mat')
z = np.array((z.values()))
mat[:,240:360]= z[240,:,:]
del z


import matplotlib.py as plt
imageplot = plt.imshow(matrix)

您也可以使用x[240][:][:] 代替x[240,:,:]

很高兴能帮上忙!如果您觉得我的回答对您有用,请随时接受。 :-)

继续:

因为以下代码运行良好,我猜问题出在加载矩阵的维度上,即 x.values() 等。所以请先检查它,使用 print x.shape()。

import numpy as np

mat = np.zeros((1024,360))
x = np.zeros((1024,1024,120))

mat[:,0:120] = x[240,:,:]

print mat

[[ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 ..., 
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]]

【讨论】:

  • Traceback(最近一次调用最后一次):文件“/home/prakriti/Project/s.py”,第 8 行,在 mat[:,0:119]= x[240, :,:] IndexError: 无效索引
  • 看答案继续。
猜你喜欢
  • 2015-07-11
  • 2014-03-06
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 2012-03-11
  • 2011-06-14
  • 2014-07-13
  • 1970-01-01
相关资源
最近更新 更多