2017-02-26 5 views
0

私は構造がspace_averaged_dataであり、可変長のセル配列として定義されたPsというメンバを持っています。 num_pの値が1である場合MATLABエラー "この割り当てに必要なスカラー構造"はこのステートメントで何を参照していますか?

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より大きい場合は、しかし、私は次のエラーを取得する:

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

この割り当てで非スカラー構造とは何ですか?エラーが何を指しているのか分かりません。

答えて

3

1x5structの配列を作成しています。 struct documentationを引用する:

If value is a cell array, then s is a structure array with the same dimensions as value . Each element of s contains the corresponding element of value .

発現struct('Ps', cell(1, length(Ps)))の第2引数は1x5cellあるので、出力struct1x5struct配列となり、for - ループ内の適切な割り当ては

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

希望の動作を得るには、{}に第2引数をラップして、1x1cellの配列にします。

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

for -loopは期待どおりに動作するはずです。

関連する問題