開発のヒホ

iOSとかAndroidとかのアプリを開発するのに四苦八苦するブログ

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文ではうまいこと整合性を取るのでエラーになりません。なるほど。