行間および列間で単調に増加する数値を含むMATLABで大きな行列にインデックスを付けようとしています。つまり、行列が呼び出されたA
場合(i,j)
、、、A(i+1,j) > A(i,j)
およびA(i,j+1) > A(i,j)
。
乱数を作成しn
て行列Aの値と比較し、その乱数を行列Aのどこに配置するかを確認する必要があります。つまり、nの値は行列の内容のいずれとも等しくない可能性があります。 、ただし、任意の2行と任意の2列の間にある可能性があり、Aでの位置を識別する「ビン」を決定します。この位置を見つけたら、Aと同じサイズの新しいマトリックスで対応するインデックスをインクリメントします。 。
問題は、これを1,000,000回やりたいということです。乱数を100万回作成し、これらの各数値のインデックスチェックを行う必要があります。これは、画面に着地したポイントから来る100万個のフォトンのモンテカルロシミュレーションです。行列Aは球面座標の角度で構成され、乱数は各入射光子の立体角です。
これまでの私のコードは次のようになります(詳細は重要ではないため、ここにコピーして貼り付けていません)。
for k = 1:1000000
n = rand(1,1)*pi;
for i = length(A(:,1))
for j = length(A(1,:))
if (n > A(i-1,j)) && (n < A(i+1,j)) && (n > A(i,j-1)) && (n < A(i,j+1))
new_img(i,j) = new_img(i,j) + 1; % new_img defined previously as zeros
end
end
end
end
「if」ステートメントは、nの境界を形成するAのインデックスを見つけるためにチェックしているだけです。
これは完全に正常に機能しますが、特に私のマトリックスAが11856 x 11000のサイズの画像であるため、途方もなく長い時間がかかります。これを行うためのより速く/賢く/より簡単な方法はありますか?
前もって感謝します。