我正试图使用scipy.io从MATLAB 5.0文件中读取一些实验条件。问题是输出文件是一系列复杂得离谱的数组。如何过滤matlab文件中的数据?
import scipy.io as sio
with open("sequence_output.txt", "w") as f:
mat = sio.loadmat("seq_data.seq")
f.write(str(mat))
这在输出文件中提供了如下内容。(实际文件>800行(。
我如何从这个文件中挑选出我需要的数据?
{'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Thu Mar 15 13:50:48 2018', '__version__': '1.0', '__globals__': [], 'StepData': array([[(array([[1]], dtype=uint8), array(['LoadPlate'], dtype='<U9'), array([[1]], dtype=uint8), array([[1]], dtype=uint8), array([[0]], dtype=uint8), array([[0]], dtype=uint8), array([[(array([[12]], dtype=uint8), array([[8]], dtype=uint8), array([[0]], dtype=uint8), array([[1]], dtype=uint8), array([[60]], dtype=uint8), array([[1]], dtype=uint8), array([[1]], dtype=uint8), array([[(array([[1]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[1]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[1]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[1]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[1]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[1]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[1]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[1]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[0]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[0]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[0]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[0]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[0]], dtype=uint8), array([[0]], dtype=uint8)),
(array([[0]], dtype=uint8), array([[0]], dtype=uint8)),
mat['StepData']
看起来是一个2d数组,包含一个字符串dtype数组和一整串uint8
数组(均为(1,1(数组(。该阵列的shape
可以是(1。dtype
是object
,因为它包含作为元素的数组。MATLAB源可能是cell
。
我无法复制并粘贴您的评论以进一步解读它,但它看起来也像是字符串数组和uint8
数组的混合。
MATLAB矩阵加载为numpy数字或字符串数组。它们将始终是2d(或更高(,并且可以转置(或阶数='F'(。
MATLAB单元可以具有混合的内容(数字、字符串等(,并作为对象数据类型数组加载。
MATLAB结构作为结构化数组加载,其字段名与结构字段/属性相对应。
在"[scipy]loadmat"上搜索以查看有关使用loadmat
的其他问题