MATLABのparfor内でSubscripted assignment between dissimilar structuresエラー
MATLABで唯一(?)マルチスレッドが可能になるparfor、かなり便利に作られている反面、意図しない予想外なエラーがぽこぽこ出てきて困る時があります。
今回はparfor内でSubscripted assignment between dissimilar structures.
というエラーが出ました。
inputs(1:10) = struct('data', 10) outputs = [] parfor i = 1:10 inputs(i).data2 = inputs(i).data^2; outputs = [outputs struct('data', inputs(i).data2)]; end
エラー文は以下の感じ。
Error using (parfor consume) Subscripted assignment between dissimilar structures. Error in (line 1) parfor i = 1:10 Caused by: Subscripted assignment between dissimilar structures.
parfor内のエラーは発生箇所が明確にわからず、デバッグが困難になる場合が多いのでparfor文からfor文に直すのですが、forだとエラーは発生しない・・・
このエラー文を検索すると、struct配列のフィールドの不一致が原因です。今回inputsとoutputsの2つのstruct配列がありますが、この場合はinputsが原因です。
どうやらparfor内でstruct配列の一部のフィールドを改変したためなようです。
parfor内でstruct配列の一部のフィールドが変わると他との整合性が取れなくてエラーになるのでしょう。for文ではうまいこと整合性を取るのでエラーになりません。なるほど。