我在Matlab中有一个<1x1 java.lang.String>
类型的字段。
它的值 13:06:40
当我在python中读取这个mat文件时,它会被转换为
MatlabOpaque([ ('', 'java', 'java.lang.String', [[172, 237, 0, 5, 116, 0, 8, 49, 50, 58, 48, 49, 58, 53, 49]])], dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])
<1x1 java.lang.String>
任何方式我都可以使用python 检索时间戳并将其保存为java.lang.String对象?
答案 0 :(得分:1)
Access .mat file containing matlab classes in python
询问具有类似loadmat
显示的MATLAB类对象:
MatlabOpaque([ (b'futureDS', b'MCOS', b'cStream', [[3707764736], ...])],
dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])
Python中没有任何东西可以解码这种MATLAB或Java对象。如果需要在MATLAB和scipy之间来回发送数据,请使用基本的MATLAB数组,单元格和结构。
您可以尝试解析arr
个数字列表。由于它们都是&lt; 256,它们可能代表字节。你不能把它转换成普通的MATLAB字符串吗?
In [117]: x=[172, 237, 0, 5, 116, 0, 8, 49, 50, 58, 48, 49, 58, 53, 49]
In [118]: np.array(x,np.uint8).tostring()
Out[118]: b'\xac\xed\x00\x05t\x00\x0812:01:51'
最后8个字符看起来像时间戳。但是你对java.lang.String
个对象有什么了解吗?
答案 1 :(得分:0)
可能不是您(或访问此页面的任何其他人)想听到的答案,但似乎没有简单的解决方案。正如 https://nbviewer.jupyter.org/gist/mbauman/9121961 指出的那样,存储在 .mat 文件中的 Matlab 类对象是一种未记录的方案。如果您有动力,上面的链接提供了一些如何对其进行逆向工程的线索 - 对我来说,我宁愿回到 Matlab 文件并以不同的格式保存日期,该格式可通过 scipy.io.loadmat() 读取。>