【发布时间】:2018-01-22 15:31:41
【问题描述】:
我在 Python 3.2 中有以下字典 results_dict,其中键字段是字符串值,值字段是 3 个数组的列表。每个数组有 400 个浮点值。我想把这个字典转换成可以在 Matlab 2017b 中使用的数据结构。但是,如果我执行以下操作:
savemat('GridCellResults.mat', results_dict, oned_as='row');
命令执行成功,但 Matlab 无法理解矩阵文件。出于这个原因,我编写了以下代码将前面的字典转换为 3 维矩阵 (X,Y,Z),其中 X 是数组的大小(400 个元素),Y 是每个字典键的数组数量( 3 Arrays) 和 Z 是字典中元素的数量。但是,当我执行下面的代码时,出现以下错误:
IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices
这里是代码。任何线索为什么我会收到此错误。此外,即使我尝试不使用转置功能,我也会不断收到同样的错误。
import numpy as np
CARDINALITY = 400 # Number of angular domain values.
NUM_COLUMNS = 3
NUM_CELLS = 114
matlab_array = np.zeros((CARDINALITY, NUM_COLUMNS, NUM_CELLS))
for key, value in results_dict.items():
matlab_array[:, 0, key] = np.transpose(value[0])
matlab_array[:, 1, key] = np.transpose(value[1])
matlab_array[:, 2, key] = np.transpose(value[2])
【问题讨论】:
-
这是因为您不能将字符串用作数组中的索引。尝试在 for 循环中运行整数计数器并将其用作最后一个索引而不是键。如果您想确保可以按相同顺序访问元素,可以将字典转换为
collections.OrderedDict。
标签: python arrays matlab numpy dictionary