2

マトリックスの一部を更新しようとしましたが、次のエラー メッセージが表示されました。

??? 代入は、非シングルトン添字より非シングルトン rhs 次元が少ない

私のコードは、バイナリ イメージを表すマトリックスのいくつかの値を更新しようとしています。私のコードは次のとおりです。

outImage(3:5,2:4,1) = max(imBinary(3:5,2:4,1));

最後のパラメーター (1) を削除すると、今度は同じエラーが発生します。寸法の不一致があると思いますが、取得できませんでした。outImage はそのときに作成される新しいオブジェクトです (以前作成しようとしましたが、何も変わりませんでした)。何が間違っている可能性がありますか?

4

4 に答える 4

3

別の回答に対するコメントの 1 つで、独自の拡張アルゴリズムを作成しようとしているため、3 x 3 x 1 の部分行列で最大値を取得し、その部分行列の値を最大値。関数MAXは、デフォルトで部分行列の列に沿って動作し、1 行 3 列の行列 (つまり、3 x 3 x 1 行列の列の最大値) を返します。このエラーは、MATLAB が 1 行 3 列の行列を 3 x 3 x 1 の行列に代入できないために発生します。

1 つの解決策は、1 行 3 列の行列でMAXを再度呼び出してスカラー値を取得することです。これにより、3 x 3 x 1 の部分行列の各要素にエラーなしで割り当てることができます。

outImage(3:5,2:4,1) = max(max(imBinary(3:5,2:4,1)));
于 2010-03-08T01:42:40.220 に答える
1

rhs 式の各列の最大値で outImage のすべてのインデックス付き要素を埋めますか? REPMAT を使用して、rhs で取得した行を展開できます。

outImage(3:5,2:4,1) = repmat(max(imBinary(3:5,2:4,1)),3,1)

outImage(3:5,2:4)同様に動作します。

于 2010-03-07T19:58:56.513 に答える
1

以前に同じエラーが発生しましたが、以前に左側の行列を定義していました。同じケースがあるかどうかはわかりませんが、次のことを試すことができます。

outImage=Zeros(M,N,K);

M、N、K は次元です。次に、次のように入力します。

outImage(3:5,2:4,1) = max(max(imBinary(3:5,2:4,1)));
于 2011-01-21T04:47:23.057 に答える