2013-06-16 3 views
1

의 동작을 compelete 데 시간이 너무 오래 시간을내어 및 사용이 많이 나는이 코드 조각이 :물리적 메모리

function Plot2DScatter(img1,img2) 
n = size(img1,1); 
m = size(img2,1); 
axis([0 280 0 280]) 
hold on 
    for i=1:n 
     for j=1:m 
      x = img1(i,j); 
      y = img2(i,j); 
      plot(x,y); 
     end 
    end 
end 

을하는 GUI에서 사용되는 함수이야. img1과 img2는 두 개의 2048 * 2048 이미지 행렬입니다.
루프가 4194304 번 반복되어야합니다.
내 문제는 시스템이 작업을 완료하는 데 너무 많은 시간이 걸리고 (약 45 분) CPU 사용량이 실제로 높다는 것입니다. 그리고 컴퓨터가 멈추게 될 때 많은 양의 실제 메모리 (RAM)가 필요합니다 (약 45 %).
시스템에 적용되는 압력을 줄이고 작업을 빠르게 수행 할 수있는 방법이 있습니까?

+0

작은 코멘트 : 그것은 좋은 연습 (http://stackoverflow.com/questions/14790740/using- [매트랩 변수 NAMS로'i'와'j'를 사용하지 않는]입니다 i-and-j-as-variables-in-matlab)을 사용합니다. – Shai

답변

1

가능한 경우에는 루프를 피하고 대신 매트릭스 표현식을 사용해야합니다. 당신이 할하려고하는 것은 다음과 같이 수행 할 수 있습니다

plot(img1(:),img2(:)) 

img1(:)img2(:) 직접 플롯 기능에 대한 입력으로 사용할 수있는 벡터로 이미지를 변환합니다. 목적을 위해 데이터를 원으로 직접 표시하는 분산 함수를 사용하는 것이 더 나을 수도 있습니다. 즉 :

function Plot2DScatter(img1,img2) 
    scatter(img1(:),img2(:)) 
    axis([0 280 0 280]) % note with the axis statement 
         % afterwards you do not need 'hold on' 
end 
관련 문제