Python字典转Matlab三维矩阵报错:IndexError问题排查咨询
解决将Python字典转换为Matlab可识别三维数组时的IndexError问题
你碰到的这个IndexError问题根源非常清晰——你在循环里用字符串类型的字典键key去索引numpy三维数组的第三维度了,而numpy数组的索引规则明确只接受整数、切片(:)、省略号(...)、整数/布尔数组这些类型,字符串完全不在合法索引范围内,这直接触发了错误。
修复方案
我们需要先把字典的字符串键映射成对应的整数索引,再用整数去操作三维数组,具体步骤如下:
先给每个字典键分配唯一的整数ID
因为你已经明确字典元素数量是NUM_CELLS=114,可以用枚举的方式快速生成键到索引的映射:import numpy as np from scipy.io import savemat CARDINALITY = 400 NUM_COLUMNS = 3 NUM_CELLS = 114 # 生成字符串键到整数索引的映射 key_to_idx = {key: idx for idx, key in enumerate(results_dict.keys())}修改循环中的索引逻辑
用映射后的整数索引替换原字符串键,同时注意你代码里的transpose其实是多余的——因为value[0]已经是400个浮点数的一维数组,直接赋值到matlab_array[:, 0, idx]这个维度完全匹配:matlab_array = np.zeros((CARDINALITY, NUM_COLUMNS, NUM_CELLS)) for key, value in results_dict.items(): idx = key_to_idx[key] matlab_array[:, 0, idx] = value[0] matlab_array[:, 1, idx] = value[1] matlab_array[:, 2, idx] = value[2]保存到Matlab可识别的文件(可选:保留键映射)
如果你需要在Matlab中知道第三维度每个索引对应的原字符串键,可以把key_to_idx也一起保存,这样在Matlab里就能还原原字典的键值对应关系:savemat('GridCellResults.mat', {'grid_cell_data': matlab_array, 'key_to_index': key_to_idx}, oned_as='row')
补充说明
你最初直接用savemat存字典失败,是因为Python字典的字符串键嵌套数组的结构,和Matlab的结构体/数组映射存在兼容性问题——转成规整的三维数组是让Matlab能正常解析的更稳妥方式。
内容的提问来源于stack exchange,提问作者IoT
相关产品推荐
相关产品推荐

