2014-09-10 2 views
0

2 차원 배열 A=zeros(1000,1024)이 있습니다. 나는 i 번째 행의 값 (i = 1-999)과 1000 번째 행의 값 사이의 차이를 반복적으로 계산하려고합니다.Matlab : 배열의 각 열에 대한 값 집합에서 최소값을 찾습니다.

지금 당장 나는 1-999 행을 반복하고, 현재 행과 100 행의 차이점을 계산하여 seperaate 데이터 구조 (B=zeros(999,1024))에 저장한다고 생각합니다. 이후, 나는 다른 for-loop를 사용하여 각 열의 최소값을 계산합니다.이 열은 B의 열을 반복합니다.

더 효율적이고 빠른 방법을 알고 있습니까?

답변

1

이 시도 -

min(bsxfun(@minus,A(1:999,:),A(1000,:)),[],1) 

을 당신이 일반적으로 할 수 있도록, 당신은 마지막 행에서 빼야 할 것 같다 -

min(bsxfun(@minus,A(1:end-1,:),A(end,:)),[],1) 
+1

+1 나는 생각하지만'min (더 좋은 질문입니다. –

+0

', [], 1'이 필요합니까? – Dan

+1

@ 단 하나의 행만 있으면'min'이 행을 따라 작업하는 것을 막을 것입니다. –

1

bsxfun에 대한 고전적인 사용 사례입니다 :

M = rand(1000,1024); 
V = M(end,:); 

MminusV = bsxfun(@minus, M(1:end-1,:), V); 

min(MminusV) 
+0

마지막 행을'bsxfun'에 포함 시켰기 때문에 제 해결책이 잘못되었습니다. 이제 정확하지만 당신과 똑같습니다 :) – Divakar

+1

@ 디 바카 루이스가 그들 모두를 이겼습니다.) – Dan

3

각 열의 최소값 만 원할 경우 하위 작업을 수행하여 많은 작업을 저장할 수 있습니다 끝 부분의 견인력 :

min(A(1:end-1,:),[],1) - A(end,:) 
+0

+1 잘 보였습니다! – Dan

+0

정말 쉽습니다! – Divakar

관련 문제