1

私はマトリックスのすべての要素を渡すことができ、それを行うことができることを知っています。

しかし、おそらく別のオプションがあります。

私はやってみたいです:

mat1 = mat2 * mat1;

mat1の各要素が負になるか、255より大きくなる場合は、前の要素を残します。

たとえば(結果は正しくありません。これは例のみです):

mat1 = [10  25  12
        33  7   163
        232 13  77]

mat2 = [-1  2  -3
         4 -5   6
         -7 -8  9]

mat1 = mat2 * mat1が与えると仮定します:

mat1 = [-77.32  59    298
        0       -33   12
        -600     256   80]

だから私はmat1を次のように修復したいと思います:

mat1 = [10   59  12
        0    7   12
        232  13  80]
4

2 に答える 2

5

私があなたを正しく理解していれば、あなたは行列の乗算を持っています

mat2 * mat1

行列の乗算結果を3番目の行列に格納するのが最善です

mat3 = mat2 * mat1

idx = (mat3 < 0 | mat3 > 255)

置換したいものとそうでないものがゼロの行列です。このインデックスを適用して、mat3の値をmat1の値に置き換えます

mat3(idx) = mat1(idx)

結果は、0より小さいまたは255より大きいすべての要素がmat1の値に置き換えられたマトリックスです。

于 2012-10-13T10:27:29.170 に答える
2

行列を乗算してから結果を「修正」するのが最良のオプションだと思います。理由は次のとおりです。

  1. 製品マトリックスの各セルを計算して、それを保持するかどうかを確認しました
  2. Matlabは行列の乗算を非常に高速に実行します

だから私は単に行くでしょう:

prod = mat1 * mat2
mask = (prod < 0) | (prod > 255)
prod(mask) = mat1(mask)
于 2012-10-13T10:24:25.740 に答える