我已经获得了一个。1024*1024*360
的.mat文件,即一个3D对象。我已将数据分成三个.mat文件A,B和C.它们都是1024*1024*120
。我将它们加载到矩阵'mat',即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
有人能说出我在这里做错了什么吗?
答案 0 :(得分: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.]]