2

私はグーグルで検索してきましたが、まだこれで成功していません。すべてのフィールドを考慮したa{1}とそれぞれの最大値を知りたいです。a{2}同様に、すべてのフィールドも考慮して、各 a の平均を知りたいです。

a{1}.field1=[1:5];
a{2}.field1=[1:6];
a{1}.field2=[2:8];
a{2}.field2=[2:9];

以下のループで何かがうまくいくことを望んでいました:

fn=fieldnames(a{1});
max(a{1}.(fn{:}))
mean(a{1}.(fn{:}))

私が見逃しているこれを行うための非常に効率的な方法があると思います...何か提案はありますか? ありがとう

4

2 に答える 2

4

まず、多次元構造を定義するつもりだと思います:

a(1).field1=[1:5];
a(2).field1=[1:6];
a(1).field2=[2:8];
a(2).field2=[2:9];

(中かっこの代わりに丸かっこに注意してください。中かっこを使用すると、2 つstructの を含むセル配列が得られます)。今、あなたが求める値:

max_mean = cellfun(@(x)[max(x) mean(x)], {a.field1}, 'UniformOutput', false);

これを行うと、 in の最大値と平均値、およびa(1).field1inmax_mean{1}の最大値と平均値が得a(2).field1られmax_mean{2}ます。

cellfun上記を別のフィールドにネストすることで、すべてのフィールドに対してこれを行うことができますcellfun

max_means = cellfun(@(x) ...
    cellfun(@(y)[max(y) mean(y)], {a.(x)}, 'UniformOutput', false), ...
    fieldnames(a), 'UniformOutput', false);

となることによって

max_means{1}{1} % will give you the max's and means of a(1).field1
max_means{1}{2} % will give you the max's and means of a(2).field1
max_means{2}{1} % will give you the max's and means of a(1).field2
max_means{2}{2} % will give you the max's and means of a(2).field2

ニーズに合ったものが見つかるまで、これらの関数を試してみてください。

于 2012-10-23T05:00:37.150 に答える
4

構造体の各フィールドが最大/平均関数と互換性があると仮定すると、次を使用できます。

maxima(ii) = max(structfun(@max, a{ii}))
means(ii) = mean(structfun(@mean, a{ii}))

Structfun は、列ベクトルの各フィールドの最大/平均を返します。max 関数と mean 関数を再度適用して、合計の最大/平均を簡単に見つけることができます。次に、これを構造体配列のループで実行できます。

于 2012-10-24T00:34:29.287 に答える