2016-06-30 1 views
-1

반복되는 질문 인 경우 사과드립니다. 가정하자반복 표식을 사용하여 MATLAB 행렬을 변형하십시오.

I 매트릭스

0 1 2 3 4 5 6 7 
8 9 1 2 3 4 5 6 

및 벡터 B [1,2,3,4,1,2,3,4]을 갖는다. 따라서 행렬 A에는 벡터 b을 기반으로 여러 정렬 된 측정 값이 포함됩니다.

과 같은 크기가 [2 2 4] 인 행렬을 어떻게 바꿀 수 있습니까?

나는 reshape이 필요하다는 것을 알고 있습니다. permute을 사용해 보았지만 반복되는 인덱스는 처리하지 않습니다.

감사합니다.

+1

가 b''와 아무 상관이? – Suever

+1

임의의 b에 대한 일반 솔루션을 찾고 있습니까 아니면 항상 위 패턴의 b입니까? 나중에 훨씬 더 간단한 해결책이 가능합니다. – Daniel

+0

행렬 A는 b에 의해 주어진 채널에 해당하는 데이터입니다. 실제 행렬은 훨씬 더 크고, b는 1-6까지 실행됩니다. 질문에서 언급 한대로 채널별로 데이터를 분리해야합니다. – Shinobii

답변

2

당신은 방금

A=[0 1 2 3 4 5 6 7; 8 9 1 2 3 4 5 6] 

%A = 
%  0  1  2  3  4  5  6  7 
%  8  9  1  2  3  4  5  6 

b=[1,2,3,4,1,2,3,4] 

%b = 
%  1  2  3  4  1  2  3  4 

[~,idx]=sort(b) 

%idx = 
%  1  5  2  6  3  7  4  8 

A=A(:,idx) 

%A = 
%  0  4  1  5  2  6  3  7 
%  8  3  9  4  1  5  2  6 

A=reshape(A,[2,2,4]) 

%A(:,:,1) = 
%  0  4 
%  8  3 

%A(:,:,2) = 
%  1  5 
%  9  4 

%A(:,:,3) = 
%  2  6 
%  1  5 

%A(:,:,4) = 
%  3  7 
%  2  6 

당신이 b의 각 번호가 동일한 횟수로 반복되는 것을 보장 할 수있을 경우에만 동작합니다,주의를 재편하기 전에 열을 정렬 할 필요가 가깝습니다.

+0

어떤 종류의 마법이 이것입니다!? 이것은 대단합니다, 고마워요. 정확히 내가 무엇을 찾고 있었는지. – Shinobii

2

당신의 b는 항상 어떤 일을 반복한다 가정하면 : N이 같은 패턴이 귀하의 질문에, 당신은 사용할 수 있습니다

출력을 무엇
p=4 % number of indices 
permute(reshape(A,size(A,1),p,[]),[1,3,2])