2

私はMATLABに2つの行列がarr1ありarr2、それぞれサイズが1000*1000です。それらの要素を比較し、その比較を結果マトリックスに保存します。resarrこれも1000 * 1000であり、各要素について次のようになります。

  • の要素がの要素arr1よりも大きい場合はarr2、結果に値1を配置します
  • の要素arr2が大きい場合は、値2を格納します

しかし、forループでは速度が遅いため、これを実行したくありません。これどうやってするの?


編集:arr1また、と の比較に応じて、1000 * 1000 * 3の結果マトリックスに異なるRGB値を保存したい場合、それはarr2遅いループなしで行うことができますか?

たとえば、大きい場合は(255,0,0)を格納し、大きい場合はarr1(0,255,0)を格納します。arr2

4

2 に答える 2

5
resarr = 2 - (arr1 > arr2)

arr1>arr2arr1とarr2を要素ごとに比較し、arr1が大きい場合は1を含み、それ以外の場合は0を含む1000x1000行列を返します。パーツは、2 - arr1がarr2よりも大きい場合は1、それ以外の場合は2の行列になります。

注:ある時点でarr1とarr2がeuqalである場合、2も取得されます(arr1> arr2が0を返すため、2-0 = 2)。

于 2010-02-05T17:53:14.667 に答える
2

編集に関しては、Ofriresarrが提案したようにマトリックスを計算したら、次の方法でRGB マトリックスを変更できます。img

N = numel(resarr);  %# The number of image pixels

index = find(resarr == 1);  %# The indices where arr1 is bigger
img(index) = 255;           %# Change the red values
img(index+N) = 0;           %# Change the green values
img(index+2*N) = 0;         %# Change the blue values

index = find(resarr == 2);  %# The indices where arr2 is bigger
img(index) = 0;             %# Change the red values
img(index+N) = 255;         %# Change the green values
img(index+2*N) = 0;         %# Change the blue values
于 2010-02-05T19:03:16.527 に答える