【问题标题】:Cell Array String from Matlab to Python从 Matlab 到 Python 的元胞数组字符串
【发布时间】:2021-01-17 10:20:31
【问题描述】:

我有一个从 Matlab 获得的 .mat 数据集,其中包含一些数据,包括一个 1920x1 元胞数组字符串,存储如下:

"sample1"
"sample2"
"sample3"

我需要在 Python 中将其作为列表或数组导入。我已经使用来自 scipy 的loadmat 得到了我的垫子,并且可以正常导入其他类型的数据,但是我在尝试导入单元字符串数组时遇到了问题:

import scipy.io as spio
import pandas as pd
import numpy as np

mat = spio.loadmat('Dati.mat', squeeze_me=True)
FD_Labels_cell = mat_char['FD_Labels']
list= np.asarray(FD_Labels_cell, dtype=object).tolist()
print(list)

输出:

[[MatlabOpaque([(b'', b'MCOS', b'string', array([[3707764736],
       [         2],
       [         1],
       [         1],
       [         1],
       [         1]], dtype=uint32))],
             dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])], [MatlabOpaque([(b'', b'MCOS', b'string', array([[3707764736],
       [         2],
       [         1],
       [         1],
       [         2],
       [         1]], dtype=uint32))],
             dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])], [MatlabOpaque([(b'', b'MCOS', b'string', array([[3707764736],
       [         2],
       [         1],
       [         1],
       [         3],
       [         1]], dtype=uint32))],
             dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])], [MatlabOpaque([(b'', b'MCOS', b'string', array([[3707764736]

然后输出继续。 我不知道为什么我会得到这种输出,而且我无法从我的 Matlab 文件中获取单元格。

【问题讨论】:

  • MatlabOpaque 表示单元格包含 loadmat 无法转换为 python 等效项的 MATLAB 对象。
  • 所以不兼容。好的,谢谢!
  • 能否将您的元胞数组转换为 table,然后将其写入 csv (writetable)?

标签: python string matlab numpy cell-array


【解决方案1】:

那不是元胞数组,它是一个字符串。它是一种不同的数据类型。 Matlab 有 3 种不同的文本数据类型:

  1. 字符数组。看起来像 'this is a char'[a b';'c d']`。注意单引号和方括号)。由于历史原因,这有时在文档中称为字符串。
  2. 单元字符串,它实际上只是一个 char 数组的单元数组。看起来像{'a b'}。注意单引号和大括号。这有几个名称、字符串元胞数组、元胞字符串或 cellstr。
  3. 字符串数组。看起来像 "a b"["a b", "c"]。注意双引号。这是与前两种完全不同的数据类型,而且更新很多很多,因此 scipy 显然不支持它。

如果您在保存之前使用 MATLAB 中的cellstr 函数将其转换为元胞数组,您应该能够正确加载它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多