2014-11-10 4 views
0

행렬에 시퀀스가 ​​있습니다 (Matlab의 sortrows 함수로 계산). 도 결과지만,Matlab에서 행의 pairwise 교환을 수행하는 방법은 무엇입니까?

는 A의 순서에 순열을 수행하는 대신에
A = [5; 3; 4; 1; 2]; 
[b, c] = size(A) 

, 나는 세포의 페어의 교류를 peform받는 싶습니다, 그래서 성능이 더 나은 실행 : 매트릭스가 계산 한 후이 같이 보입니다 말 정확하지 않을 것입니다 (그것은 매우 가까운 대답 일 것입니다). 나는 행이 결국 어느 정도 같이 할 =>

A1 = [5; 4; 3; 2; 1]; 
A2 = [4; 5; 3; 1; 2]; 
A3 = [4; 3; 5; 2; 1]; 
A4 = [3; 4; 5; 1; 2]; 

이제 캐치 행렬은 (는 다름)로 거의 많은 요소를 포함 할 것입니다. 매트릭스 'A'는 그 예입니다. A (또는 다른 매트릭스)에서 [b-1] 페어 와이즈 인터체인지는 어떻게 수행합니까?

+0

'A1'에서 'A4'까지 더 철저하게 구할 수 있습니까? 나는 그 패턴을 보지 못했다. – rayryeng

+0

심지어 어떤 패턴도 볼 수없고 참고로, 행렬 A는 실제로 열 벡터처럼 보입니다. –

+0

A1과 A4에는 실제로 패턴이 없습니다. 나는 서로 옆에있는 숫자에 대해 pairwise 인터체인지를 수행하려고합니다. –

답변

1
A = [5; 3; 4; 1; 2]; 

swapIndexLeft = [1,2,3,4,5]; 
swapIndexRight = [2,3,4,5,1]; 

%// make sure the dimension of indices agree 
assert(numel(swapIndexLeft) == numel(swapIndexRight)) 

%// ... and values do not exceed dimensions of the vector A 
assert(max(swapIndexLeft)<=numel(A)) 
assert(max(swapIndexRight)<=numel(A)) 

%// swap iteratively 
for ii = 1:numel(swapIndexLeft) 
    temp = A(swapIndexLeft(ii)); 
    A(swapIndexLeft(ii)) = A(swapIndexRight(ii)); 
    A(swapIndexRight(ii)) = temp; 
    %// now you have an array where the element swapIndexLeft(ii) 
    %// has been swapped with swapIndexRight(ii) 

    %// do your calculations here 
end 
+0

+1 - OP가 열리기 전에 OP가 원했던 바를 알아내는 것. 잘 했어! – rayryeng

관련 문제