问题描述
我有一个从 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]],dtype=uint32))],dtype=[('s0','O'),('s1',('s2',('arr','O')])],[MatlabOpaque([(b'',[ 3],array([[3707764736]
然后输出继续。 我不知道为什么我会得到这种输出,而且我无法从我的 Matlab 文件中获取单元格。
解决方法
那不是元胞数组,而是一个字符串。它是一种不同的数据类型。 Matlab 有 3 种不同的文本数据类型:
- 字符数组。看起来像
'this is a char'
或[
a b';'c d']`。注意单引号和方括号)。由于历史原因,这有时在文档中被称为字符串。 - 单元格字符串,它实际上只是字符数组的单元格数组。看起来像
{'a b'}
。注意单引号和大括号。这有几个名称,即字符串元胞数组、元胞字符串或 cellstr。 - 字符串数组。看起来像
"a b"
或["a b","c"]
。注意双引号。这是与前两种完全不同的数据类型,而且也更新了很多,因此 scipy 显然不支持它。
如果您在保存之前在 MATLAB 中使用 cellstr
函数将其转换为元胞数组,您应该能够正确加载它。