Main Content

エラーの解決: サイズの不一致

問題

配列サイズに互換性がない場合、または暗黙的な拡張を使用できない場合は、コード ジェネレーターでサイズ不一致エラーが発生します。

MATLAB® と生成されたコードの二項演算子および関数のほとんどは、互換性のあるサイズをもつ数値配列をサポートします。すべての次元で入力のサイズが同じであるか、いずれかのサイズが 1 である場合、2 つの入力のサイズには互換性があります。最も簡単なケースでは、2 つの配列のサイズは、厳密に同じであるか一方がスカラーの場合に互換性があります。次に例を示します。

magic(4) + ones(4,1);
% where magic(4) =             ones(4,1)  = 
%   16     2     3    13                    1
%    5    11    10     8                    1
%    9     7     6    12                    1
%    4    14    15     1                    1
ans =

    17     3     4    14
     6    12    11     9
    10     8     7    13
     5    15    16     2

2 番目の配列は、最初の行列の次元と一致するように暗黙的に拡張されています。詳細については、基本的な演算で互換性のある配列サイズを参照してください。

次のいずれかの条件に当てはまる場合、互換性のあるサイズの配列で二項演算を実行しているときに暗黙的な拡張を使用できない可能性があります。

サイズが一致しない場合、または暗黙的な拡張を使用できない場合は、次のエラーが生成されます。

%Size mismatch between two arrays
Size mismatch (size [10][1] ~= size [1][10])

上記の条件が構造体フィールドと cell 要素に当てはまる場合、コード ジェネレーターはそれぞれ次のエラーを生成します。

%Size mismatch in structure fields
Size mismatch (size [10][1] ~= size [1][10]) in field StructField

%Size mismatch in cell elements
Size mismatch (size [10][1] ~= size [1][10]) in element cellElement.

考えられる解決策

暗黙的な拡張を有効にしている二項演算で、演算が関数のスコープ内にあることを確認します。次の条件について確認します。

  • 配列サイズの互換性。

  • 二項演算が coder.noImplicitExpansionInFunction を呼び出す関数のスコープ内にある。

  • coder.sameSizeBinaryOp でオペランドが暗黙的に拡張されない、またはスカラー拡張がサポートされない。

  • プロジェクト全体で暗黙的な拡張を無効にしている場合に、暗黙的な拡張が必要なすべての演算でエラーが発生する。

互換性のあるサイズの配列に対する二項演算の実行

サイズが異なる配列で二項演算を実行する必要がある場合は、サイズに互換性があり、暗黙的な拡張が関数スコープ内で有効になっていることを確認します。基本的な演算で互換性のある配列サイズを参照してください。

coder.noImplicitExpansionInFunction を使用しない二項演算の呼び出し

関数に coder.noImplicitExpansionInFunction を含める必要がある場合は、暗黙的な拡張が有効になっている別の関数で必要な二項演算を呼び出します。

coder.sameSizeBinaryOp を使用しない二項演算の呼び出し

特定の演算で暗黙的な拡張が望ましくない場合は、coder.sameSizeBinaryOp に対して同じサイズの入力引数を指定します。coder.sameSizeBinaryOp ではスカラー拡張を実行できないため、入力引数のサイズが異なる場合はエラーが発生します。

プロジェクトでの暗黙的な拡張の有効化

暗黙的な拡張を有効にしてもプロジェクトに影響がない場合は、コード構成オブジェクトの EnableImplicitExpansion プロパティを true に設定して、暗黙的な拡張を有効にすることを検討してください。

特定の演算で暗黙的な拡張が必要な場合は、coder.sameSizeBinaryOp または coder.noImplicitExpansionInFunction を使用して、他の演算が暗黙的に拡張されないようにすることを検討してください。生成コードでの暗黙的な拡張の最適化を参照してください。

参考

|

関連するトピック