1. ホーム
  2. matlab

[解決済み】MATLABのエラー「この課題にはスカラー構造が必要です」は、この文の何を指しているのか?

2022-01-27 21:17:43

質問内容

ある構造体があります。 space_averaged_data を持ち、そのメンバーは Ps は、長さが可変のセル配列として定義されています。構造体を作成した後、このセル配列に値を代入すると、以下のようになります(わかりやすくするために、他の構造体フィールドは省略しています)。

Ps = cell( 1, num_p );
for p = 1:length(Ps)
    Ps{p} = rand( 150, 1000 );
end

space_averaged_data = struct( 'Ps', cell( 1, length(Ps) ) );

for p = 1:length(Ps)
    space_averaged_data.Ps{p} = mean( Ps{p}, 2 );
end

の値が num_p が1であれば(つまり、セル配列が配列でなければ)、すべてうまくいきます。もし num_p が1より大きい場合、以下のエラーが発生します。

Scalar structure required for this assignment.
Error in:
    space_averaged_data.Ps{p} = mean( Ps{p}, 2 );

この課題におけるノンスカラ構造とは? エラーが何を指しているのかさっぱりわかりません。

どうすればいいですか?

を作成します。 1x5 struct の配列になります。 を引用すると struct ドキュメント :

もし value がセル配列である場合 s と同じ次元の構造体配列です. value . の各要素は s の対応する要素を含んでいます。 value .

式の第2引数は struct( 'Ps', cell( 1, length(Ps) ) )1x5 cell の場合、出力は struct1x5 struct の配列で、適切な代入を行います。 for -ループは次のようになります。

space_averaged_data(p).Ps = mean( Ps{p}, 2 );

希望する動作を得るには、第2引数を {} にして、それを 1x1 cell の配列になります。

space_averaged_data = struct( 'Ps', {cell( 1, length(Ps) )} );

と、その for -ループは期待通りに動作するはずです。