You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含struct的Matlab .mat文件中truth数据正确加载到Python数组?

解决Matlab .mat结构体字段加载到Python的维度异常问题

Matlab生成的data.mat文件包含名为Filter_Results的结构体,其中truth字段是维度为(7198×3)的位置数据。使用以下Python代码加载时,输出的truth.shape为(1,1),不符合预期的(7198,3):

import scipy.io as spio
import numpy as np

filename1 = spio.loadmat('data.mat')
filter_results = filename1['Filter_Results']
truth = np.matrix((filter_results['truth'][:,:]))
print(truth.shape)

问题原因

scipy.io.loadmat加载Matlab结构体时,会将结构体包装在一个**(1,1)的二维numpy数组**中(对应Matlab中结构体数组的存储形式)。直接访问filter_results['truth']时,实际是从这个(1,1)数组的每个元素中取字段,结果仍然是嵌套的(1,1)数组,而非原始的二维数据。

解决方案

先通过[0,0]索引取出(1,1)数组中实际的结构体对象,再访问truth字段:

修改后的代码:

import scipy.io as spio
import numpy as np

# 加载mat文件
filename1 = spio.loadmat('data.mat')
# 取出结构体数组中的实际结构体对象
filter_results = filename1['Filter_Results'][0, 0]
# 直接获取truth字段,得到原始维度的数组
truth = filter_results['truth']
# 可选:如果需要转成matrix类型(numpy数组更推荐)
# truth = np.matrix(filter_results['truth'])
print(truth.shape)  # 输出 (7198, 3)

执行上述代码后,truth.shape会输出预期的(7198, 3)。如果不需要matrix类型,直接使用numpy数组即可(filter_results['truth']本身就是numpy.ndarray类型)。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:52:19