簡體   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