在 python 和 MATLAB 之间传输数据:如何处理列表列表?

问题描述 投票:0回答:1

我也在 Mathwork 上发表了这篇文章。但我想我在这里问也会受益。 这是我的数学社区帖子的链接。 https://www.mathworks.com/matlabcentral/answers/2104821-load-save-python-list-of-list-with-matlab?s_tid=prof_contriblnk

基本上,我的问题是我的“.mat”数据中有一些单元格数组,它们就像地雷。我只有踩到它们时才知道。这些元胞数组使用“mat73”库加载 matfile 转换为 python 中的列表列表,但当我尝试使用 scipy 保存它们时无法转换回 matlab 元胞数组。

我想知道是否还有其他可能的Python库可以处理列表的保存列表。或者如果我可以保存 python 对象并使用一些 MATLAB 技巧将它们加载到 MATLAB。

我的数据看起来像这样:

dat = {'k1':{'k11':[1,2,3],'k12':[[1,2],[1],[2,2]]},'k2': [] ....}

问题是保存 dat['k1']['k12'] 因为 list 中的列表长度不同。但我不知道这个“k12”会在我的实际数据中弹出,而且它可能比这个示例嵌套得多。

欢迎任何意见。我可以尝试用 MATLAB 和 python 来解决。非常感谢!

我可以通过在 python 中将列表的列表填充到相同的长度来避免这种情况。我填充数据的方式来自这篇文章:填充列表列表以使其等于最大列表的大小

当我创建列表列表并想将其保存到 matfile 时,我使用了该方法。 这仍然是可能的,但在当前问题上这样做非常烦人......(如果我想填充它,我必须搜索列表列表。

python list matlab save cell-array
1个回答
0
投票

如果您的 Python 数据仅包含简单类型,如字典、列表、数值和字符串(如示例所示),那么您应该能够使用 JSON 将数据传递给 MATLAB。

例如,在Python中:

import json

dat = {'k1':{'k11':[1,2,3],'k12':[[1,2],[1],[2,2]]},'k2': []}

with open('dat.json', 'w') as f:
    json.dump(dat, f)

然后在 MATLAB 中:

dat = jsondecode(fileread('dat.json'))

dat = 

  struct with fields:

    k1: [1×1 struct]
    k2: []

>> dat.k1

ans = 

  struct with fields:

    k11: [3×1 double]
    k12: {3×1 cell}

>> dat.k1.k12

ans =

  3×1 cell array

    {2×1 double}
    {[       1]}
    {2×1 double}

要探索 MATLAB 结构体中的内容并以编程方式访问其内容,您可以使用

fieldnames
函数和
struct.(something)
表示法。

© www.soinside.com 2019 - 2024. All rights reserved.