matlab日期字符串在python scipy.io中生成java lang字符串

时间:2015-10-02 18:12:22

标签: java python matlab scipy

  • 我在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')])
  • 我使用scipy.io将其保存回MAT文件,我有一个结构,上面有dtype而不是<1x1 java.lang.String>

任何方式我都可以使用python 检索时间戳并将其保存为java.lang.String对象?

2 个答案:

答案 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() 读取。