【问题标题】:Python Error: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indicesPython 错误:只有整数、切片 (`:`)、省略号 (`...`)、numpy.newaxis (`None`) 和整数或布尔数组是有效的索引
【发布时间】:2020-01-21 14:15:05
【问题描述】:

运行这段代码时出现下面的代码:

import numpy as np
from scipy.io import loadmat

mat = loadmat("/home/sami/sami/Dataset/mat/2018-03-11-19-42-58_atis_humanity_star_slewing_td.mat")
matTD = mat['TD']
matX = matTD['x'][0,0]
matY = matTD['y'][0,0]
matTs = matTD['ts'][0,0].astype('int32')
matP = matTD['p'][0,0]

它发生在这些线上:

matX = matTD['x'][0,0]

matY = matTD['y'][0,0]

matTs = matTD['ts'][0,0].astype('int32')

matP = matTD['p'][0,0]

这是输出错误:

    matX = matTD['x'][0,0]
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

这是我的矩阵的样子:

[[      122       209         0 665074460]
 [       13        68         0 665074490]
 [      152        30         0 665074603]
 ...
 [      270        56         0 694569547]
 [      270        56         0 694569547]
 [      152        30         0 694569619]]

【问题讨论】:

  • 你可能想要:,而不是,...?
  • 我试过同样的错误出现

标签: python


【解决方案1】:

它基本上说你不能使用字符串,例如'x' 用于方括号内的索引。

mat 是根据 scipy 文档 (https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html) 的字典。所以它的结构类似于{'name': [data]}。您的第一个 matTD = mat['TD'] 得到了 [data] ,看来 matTD ([data]) 类型不再是 dict,因此您不能使用字符串进行索引。去检查什么是matTD 类型以了解如何索引它。

或者,您可能需要继续使用mat['x'] 而不是matTD['x']

【讨论】:

  • 感谢您的回复,mat 是 dict 并且 matTD 变成了“numpy.ndarray”,并且使用 mat 代替 matTD 并没有实际工作
  • @samiarja,使用 numpy ndarrays 可以做很多事情,但使用字符串索引不是其中之一(docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html)。为什么您希望您的代码能够正常工作?
【解决方案2】:

我找到了此代码的解决方案。解决方法如下:

from scipy.io import loadmat
import numpy as np
mat = loadmat("/home/sami/sami/Dataset/data/test2/test2.mat")

matTD = mat['TD']
matX = mat['TD'][:,0]
matY = mat['TD'][:,1]
matP = mat['TD'][:,2]
matT = mat['TD'][:,3].astype('int32')
nEvents = matT.shape[0]
events = np.zeros((nEvents,4))

events[:,0] = matX.flatten()
events[:,1] = matY.flatten()
events[:,3] = matT.flatten()
events[:,2] = matP.flatten()


np.save("/home/sami/sami/Dataset/data/test1/test1.npy",events.astype('int32'))

该代码旨在将 .mat 文件转换为 .npy,而我只是没有正确地对数据进行切片。

【讨论】:

    猜你喜欢
    • 2018-03-11
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 2019-09-26
    • 2017-12-08
    • 2019-03-13
    相关资源
    最近更新 更多