【发布时间】:2021-07-02 16:09:08
【问题描述】:
我注意到可以使用点符号访问 Nd Array items Container 中的变量。
对于由 scipy 的 loadmat 包生成的文件尤其如此。
例如,以下是来自 Nd Array items Container 的变量,使用 dot 表示法访问。
dot_notation_output=stru[0].fieldA
我很好奇如何为给定的嵌套字典重现类似的东西,如下所示。
struc=[{'fieldA': 11.02, 'fieldB': 2.69,'fieldC': 2.69}, {"fieldA": 21.4, "fieldB": 66.69,'fieldC': 2.69},
{"fieldA": 100,"fieldB": 200,'fieldC': 2.69}]
直接从 np.array 创建不会重现上面的发现
np.array(struc)
Matlab 中的结构如下创建
for idx = 1:3
stru(idx) = create_Structure();
stru(idx).fieldA = '1';
stru(idx).fieldB = 3;
stru(idx).fieldC = 44;
end
save('struc_mat.mat','stru')
function s = create_Structure()
%% Create a structure
s = struct( ...
'fieldA', NaN,'fieldB', NaN,'fieldC',NaN);
end
matlab生成的struc,可以用scipy-loadmat在Python中打开
from scipy.io import loadmat
stru = loadmat ( 'struc_mat.mat', squeeze_me=True, struct_as_record=False )
stru = stru['stru']
dot_notation_output=stru[0].fieldA
【问题讨论】:
-
loadmat给你的是recarray。这是structured array的变体,其中fields可以访问dict之类的,例如arr['fieldA']或作为属性arr.fieldA。 numpy.org/doc/stable/user/basics.rec.html。这个 recarray 子类是 numpy 历史早期引入的一种便利,但大部分被结构化数组方法所取代。