2016-06-30 3 views
-1

Ich entschuldige mich, wenn dies eine wiederholte Frage ist.Matrix MATLAB mit wiederholten Indices umformen

Angenommen, ich habe eine Matrix A

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

und einem Vektor b [1,2,3,4,1,2,3,4]. Somit enthält die Matrix A mehrere geordnete Messungen basierend auf dem Vektor b.

Wie kann ich die Matrix so umformen, dass sie die Dimension [2 2 4] hat, so dass A(:,:,1) = [0,4;8,3]?

Ich verstehe, ich brauche reshape. Ich habe versucht, permute zu verwenden, jedoch behandelt es wiederholte Indizes nicht.

Danke!

+1

Was die Ausgabe alles hat mit 'b' zu tun? – Suever

+1

Suchen Sie nach einer generischen Lösung für beliebiges b oder ist b immer das obige Muster? Für die späteren sind viel einfachere Lösungen möglich. – Daniel

+0

Die Matrix A ist die Daten, die den durch b angegebenen Kanälen entsprechen. Die tatsächliche Matrix ist viel größer und b läuft von 1-6. Ich muss die Daten nach den in der Frage genannten Kanälen trennen. – Shinobii

Antwort

2

Sie sind in der Nähe, man muss nur die Spalten sortieren, bevor sie

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 

Seien Sie vorsichtig, dies funktioniert nur, wenn Sie versichern kann, Umformen, dass jede Zahl in b gleich oft wiederholt wird.

+0

Welche Art von Zauberei ist das? Das ist großartig, vielen Dank! Genau das, was ich gesucht habe. – Shinobii

2

Vorausgesetzt, dass Ihr b wird immer einige 1 wiederholt: n Muster, wie es in Ihrer Frage ist, können Sie verwenden:

p=4 % number of indices 
permute(reshape(A,size(A,1),p,[]),[1,3,2])