Modles1
サイズ(1x180)のmatlab構造体配列があり、フィールドa
、、、、...、 。があります。b
c
z
各フィールドにいくつの異なる値があるのかを理解したいと思います。すなわち
max(grp2idx([foo(:).a]))
上記は、フィールドa
がdoubleの場合に機能します。 {foo(:).a}
フィールドaが文字列/文字である場合に使用する必要があります。
これを行うための現在のコードは次のとおりです。私はevalを使用するのが嫌いで、本質的にはswitchステートメントです。もっと良い方法はありますか?
names = fieldnames(Models1);
for ix = 1 : numel(names)
className = eval(['class(Models1(1).',names{ix},')']);
if strcmp('double', className) || strcmp('logical',className)
eval([' values = [Models1(:).',names{ix},'];']);
elseif strcmp('char', className)
eval([' values = {Models1(:).',names{ix},'};']);
else
disp(['Unrecognized class: ', className]);
end
% this line requires the statistics toolbox.
[g, gn, gl] = grp2idx(values);
fprintf('%30s : %4d\n',names{ix},max(g));
end