首页 > 解决方案 > 使用 scipy.io savemat 将多个 Python 字典转换为 MATLAB 结构体数组

问题描述

一个简单的问题,但我似乎无法理解。我正在使用该scipy.io库将 Python 字典保存为 Matlab 结构。现在,该库的文档scipy.io向我们展示了如何将单个 Python 字典转换为单个 Matlab 结构:

>>> a_dict = {'field1': 0.5, 'field2': 'a string'}
>>> sio.savemat('saved_struct.mat', {'a_dict': a_dict})

这听起来很公平,并且有效:

在此处输入图像描述

但是,我现在想对多个 Python 字典执行相同的操作。我希望将它们转换为 Matlab 结构,其中列名等于所有字典的键(显然都是相同的键名),并且我希望每一行代表其中一个键的值字典。如果我没看错,这称为 1 x K 结构,有 10 个字段,其中 K 是我要映射的行数(Python 字典)。字段示例如下所示:

在此处输入图像描述

虽然我自己完全不知道正确的 Matlab 术语,但评论中的一个好人告诉我这应该被称为结构数组。我尝试简单地创建一个 Python 字典的 numpy 数组,将其放在a_dict上面代码示例的键值对中并保存,但没有成功。这样做会导致所有不同结构的列表,而不是一个大结构,其中行表示每个单独结构的值。

因此,我仍在为这个问题寻找合适的解决方案。如果您需要任何其他详细信息,请随时在评论中提问。感谢您的帮助!

标签: pythonmatlabnumpyscipy

解决方案


这是一个解决方案:

在 Python 中:

>>> a_dict = {'field1': 0.5, 'field2': 'a string'}
>>> b_dict = {'field1': 1, 'field2': 'another string'}
>>> sio.savemat('saved_struct.mat', {'dict_array':[a_dict,b_dict]})

在 MATLAB 中:

s = load('saved_struct.mat');
struct_array = [s.dict_array{:}];

您将根据需要在 MATLAB 中得到一个结构体数组。

struct_array = 

  1×2 struct array with fields:

    field1
    field2

推荐阅读