用python 读取matlab 中的结构体 / 从numpy.void中提取数据

python 读取matlab 中的结构体 / 从numpy.void中提取数据

目录

前言

用python通过scipy 库读取mat文件,如果读取的是结构体,那么就会得到numpy.void 类型的数据。

一、简单的情形示例

要读取如图所示的mat文件中的数据

用python 读取matlab 中的结构体 / 从numpy.void中提取数据
用scipy.sio.loadmat读取后得到的是:
def load_params(path,key_name):
    data = sio.loadmat(path)
    data = data[key_name]
    return data
mat_test=load_params(test_path, 'Test')
print(mat_test)
"""
[[(array([[12]], dtype=uint8), array(['abcde'], dtype='

查看维度和类型

print(mat_test.shape)
print(type(mat_test))

进一步地

mat_data=mat_test[0][0]
print(type(mat_data))
print(mat_data.shape)
print(len(mat_data))

为读取里面的数据

for item in mat_data:
     print(item)

或者是

for i in range(len(mat_data)):
    print(mat_data[i])

得到结构体中的值

"""
[[12]]
['abcde']
[[4096]]
['C:/path']
['abcdefg']
[[1]
 [2]
 [3]]
"""

但如果已经知道结构体中的字段名,那么可以直接指定字段名,类似于字典的读取方式获取字段的值,如要获取字段 p 的值那么可以直接采用

mat_test=load_params(test_path, 'Test')
mat_data=mat_test[0][0]['p']
print(mat_data)

二、代码汇总


def load_params(path,key_name):
    data = sio.loadmat(path)
    data = data[key_name]
    return data
mat_test=load_params(test_path, 'Test')
print(mat_test)
print(mat_test.shape)
print(type(mat_test))
mat_data=mat_test[0][0]
print(mat_data)
print(type(mat_data))
print('the shape of the data', mat_data.shape)
print('the len of data ', len(mat_data))
print('--'*20)
for item in mat_data:
    print(item)
print('==='*20)
for i in range(len(mat_data)):
    print(mat_data[i])
mat_test=load_params(test_path, 'Test')
mat_data=mat_test[0][0]['p']
print(mat_data)

三、对于结构体嵌套的情况

如果matlab 的结构体中存在有嵌套,要获得嵌套的数据可以类似这样操作
比如,有这么一个mat1.mat文件,里面有结构体变量’A’,为获取该结构体变量

data_A=load(mat1.mat,'A')

如果结构体A有字段 a1,a2,a3,想要直接获取a3,那么可以有

data_a3=data_A[0][0]['a3']

如果a3字段本身也是结构体,a3结构体中有b1,b2,b3,字段,那么为了获取b3字段的内容,可以采用

data_b3=data_A[0][0]['a3'][0][0]['b3']

再多一层的嵌套,数据提取方法也是类似的。

Original: https://blog.csdn.net/weixin_43537379/article/details/119857729
Author: 野鹤无粮
Title: 用python 读取matlab 中的结构体 / 从numpy.void中提取数据

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/760220/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球