我试图在 MATLAB 中索引一个大矩阵,其中包含跨行和跨列单调递增的数字,即如果矩阵被调用A
,对于每个(i,j)
,A(i+1,j) > A(i,j)
和A(i,j+1) > A(i,j)
。
我需要创建一个随机数n
并将其与矩阵 A 的值进行比较,以查看该随机数应放置在矩阵 A 中的哪个位置。换句话说,n 的值可能不等于矩阵的任何内容,但它可能位于任意两行和任意两列之间,这确定了一个“bin”,该“bin”标识了它在 A 中的位置。一旦找到这个位置,我就会在与 A 大小相同的新矩阵中增加相应的索引.
问题是我想这样做 1,000,000 次。我需要创建一个随机数一百万次,并对这些数字中的每一个进行索引检查。这是从一个点降落在屏幕上的一百万个光子的蒙特卡罗模拟;矩阵 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 的图像。有没有更快/更聪明/更简单的方法来做到这一点?
提前致谢。