来自 .mat 文件的奇怪数组。如何访问数据?

Strange array from .mat file. How to access the data?

我正在使用 Jupyter Lab!

我使用 hdf5storage 打开了一个“.mat”文件。该文件是由操作数据采集仪器的软件生成的(Rowe 的 ADCP,谁可能会问!海洋学的东西...)

我可以访问键并从除一个键之外的所有键中提取数据... 'Gps' 包含纬度和经度数据,假设在两列和多行数组中...但它的形状是(1x1),当我打印它时,我可以看到数据,但不知道如何访问它!

我如何访问这些数据?

文件在这里....

https://drive.google.com/file/d/15JEA5y5_Zt52FpPa--Cp_wwl2TYrnlQZ/view?usp=sharing

这是笔记本(适合屏幕),但你明白我的意思。

看起来像这样 'old' 风格的 MATLAB mat 文件,我可以用 scipy.io.loadmat

加载它
In [3]: data = io.loadmat('../Downloads/ADP_1911041032.mat')
In [5]: data['__header__']
Out[5]: b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Fri Dec 06 10:01:19 2019'
In [6]: data['Gps']
Out[6]: 
array([[(array([[-32.05298353, -32.0529503 , -32.0528978 , -32.05284081,
                -32.05270699, -32.05265406, -32.05266599, -32.05267098,
                -32.05268485, -32.05271432, -32.0526721 , -32.05260368,
                -32.05254208, -32.05249182, -32.05245293, -32.05241743,
...
                -52.04648597, -52.0463069 , -52.04610979, -52.04591461,
                -52.04569035, -52.04549773, -52.04532165]]))                                                                ]],
      dtype=[('lat', 'O'), ('lon', 'O')])
In [7]: gps=data['Gps']
In [8]: gps.shape
Out[8]: (1, 1)
In [9]: gps.dtype
Out[9]: dtype([('lat', 'O'), ('lon', 'O')])
In [10]: gps[0,0].shape
Out[10]: ()
In [11]: gps[0,0]['lat'].shape
Out[11]: (1, 103)
In [12]: gps[0,0]['lat'].dtype
Out[12]: dtype('<f8')

loadmat 将 MATLAB 单元格和结构转换为 numpy 数组对象。这里返回一个 (1,1) 形数组(MATLAB 总是 2+d),有一个复合 dtype,2 个字段

In [13]: gps[0,0]['lat']
Out[13]: 
array([[-32.05298353, -32.0529503 , -32.0528978 , -32.05284081,
        -32.05270699, -32.05265406, -32.05266599, -32.05267098,
        -32.05268485, -32.05271432, -32.0526721 , -32.05260368,
         ...
        -32.0491144 , -32.04907168, -32.04903315]])

gps.item()[0]returns同一个数组

基本上您需要注意 shapedtype 并准备好按自己的方式 'down' 逐步完成结构。它有助于理解 numpy 数组、结构化以及对象。