나는 단조 행에 걸쳐 증가하는 인덱스 번호가 포함 MATLAB에 큰 행렬에 노력하고있어 및 열 걸쳐, 즉 매트릭스, A
를 호출하는 경우와 A(i,j+1) > A(i,j)
.MATLAB : 몬테카를로 시뮬레이션을위한 큰 행렬을 인덱싱 모든 <code>(i,j)</code>, <code>A(i+1,j) > A(i,j)</code>에 대한
랜덤 넘버 n
을 생성하고 그것을 매트릭스 A의 값과 비교하여 그 랜덤 넘버가 매트릭스 A에 어디에 위치해야 하는지를 알아야합니다. 즉, n의 값은 행렬의 내용이지만 두 행과 두 열 사이에있을 수 있으며 A에서 위치를 식별하는 "빈"을 결정합니다.이 위치를 찾으면 새로운 행렬의 해당 색인을 증가시킵니다. A와 같은 크기입니다.
문제는 제가 이것을 1,000,000 번하고 싶다는 것입니다. 나는 무작위 수를 백만 번 만들고이 수의 각각에 대해 색인 검사를 수행해야합니다. 몬테카를로 (Monte Carlo) 스크린 상에 상륙하는 지점으로부터 오는 백만 광자의 시뮬레이션입니다. 행렬 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
문은 인덱스를 찾아 확인하는 중입니다 "만일" n의 범위를 형성하는 A의
이것은 완벽하게 정상적으로 작동하지만 특히 행렬 A가 크기 11856 x 11000의 이미지이므로 엄청나게 오래 걸립니다.이 작업을보다 빠르고 쉽게 수행 할 수있는 방법이 있습니까?
미리 감사드립니다.
코드가있는 그대로는 범위를 벗어나는 인덱스가 'A'로 잘못됩니다. – Jonas
네가 맞아. 고마워. 내 실제 코드는이를 고려합니다. 나는 그저 요점을 알아 내고 싶었다. – Shash
또한 "증가"횟수만큼 증가분을 계량해서는 안됩니까? 그렇지 않으면, 광자는 각도가 커질수록 커집니다. – Jonas