python - 使用 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
上面代码示例的键值对中并保存,但没有成功。这样做会导致所有不同结构的列表,而不是一个大结构,其中行表示每个单独结构的值。
因此,我仍在为这个问题寻找合适的解决方案。如果您需要任何其他详细信息,请随时在评论中提问。感谢您的帮助!
解决方案
这是一个解决方案:
在 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
推荐阅读
- r - 在使用 `cut()` 合并数据后创建一个 `chr` 列标签
- r - 如何做正则表达式来匹配一个数字,然后在 R 中为一个大列表同时乘以这个数字?
- opengl - openGL gl.glReadPixels -- 分辨率高于屏幕尺寸
- firebase - 使用 nativescript-plugin-firebase 添加一个带有查询的事件监听器
- javascript - ScrollView undefined 不是对象
- python-3.x - 按 Pandas 分组和聚合
- vue.js - 如何使用 ASP.NET / Razor partials 将 Vue/Webpack 包注入 webpack HTML 模板
- javascript - 如何使用可能具有嵌套对象的现有对象的一部分创建新对象
- spring-cloud-contract - 为什么 Spring Cloud Contract stub runner 有本地和远程属性?
- android - 使用 REST API 从 Firebase 检索数据