構造体のマトリックスがあります。そのマトリックスから、フィールドの1つだけを値として持つ同じサイズのマトリックスを抽出しようとしています。
私は struct2cell と同様の関数を使用しようとしましたが、成功しませんでした。これはどのように行うことができますか?
Jonasの例を借ります。を使用し[]
て、特定のフィールドを収集できます。
% Create structure array
s(1:2,1:3) = struct('a',1,'b',2);
% Change values
for idx = 1:prod(size(s))
s(idx).a = idx;
s(idx).b = idx^2;
end
% Gather a specific field and reshape it to the size of the original matrix
A = reshape([s.a],size(s));
B = reshape([s.b],size(s));
私があなたを正しく理解していれば、struct
たとえばこのような配列があります
s(1:2,1:3) = struct('a',1,'b',2);
ここで、フィールドのみを持つ別の構造体が必要ですb
[newS(1:2,1:3).b] = deal(s.b);
編集
出力のみが必要な場合 (およびフィールド値がスカラーの場合) は、次の操作を実行できます。
out = zeros(size(s));
out(:) = cat(1,s.b)
同様の問題がありますが、構造体配列のフィールドの内容は、データのタグ付けに使用する可変長文字列であるため、フィールドの内容を抽出するときに、可変長文字列のセルが必要です。
getfieldとarrayfunを使用するこのコードは機能しますが、必要以上に複雑だと思います。
sa = struct('name', {'ben' 'frank', 'betty', 'cybil', 'jack'}, 'value', {1 1 2 3 5})
names = arrayfun(@(x) getfield(x, 'name'), sa, 'UniformOutput', false)
誰かがよりクリーンな代替案を提案できますか? マッピング ツールボックスのextractfieldが機能しているように見えますが、基本の MATLAB システムの一部ではありません。
更新: 私は自分の埋め込まれた質問に答えました。
names = {sa.name}