繁体   English   中英

列表索引必须是整数,而不是元组?

[英]List indices must be integers, not tuple?

我得到了一个.mat文件,它是1024*1024*360即3D对象。 我将数据分为三个.mat文件A,B和C。它们三个都是1024*1024*120 我正在将它们加载到1024*360的矩阵'mat'中。 我正在逐一加载它们,然后删除它们以腾出空间。 基本上,它只是点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矩阵创建一个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,:,:]

很高兴为您提供帮助! 如果您觉得我的回答对您有用,请随时接受。 :-)

继续:

因为下面的代码运行良好,所以我想问题出在加载矩阵的尺寸iexvalues()等处。因此请首先使用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.]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM