2016-08-03 14 views
2

Ich habe eine Spaltenmatrix neu zu gestalten alsWie Spaltenmatrix entsprechend der Zeilengröße einer anderen Matrix in Matlab

P = [1;2]; 

folgt ich eine andere Spaltenmatrix Q haben, die zu der ersten Matrix hinzugefügt werden muss. Aber die Anzahl der Zeilen in der zweiten Spalte Matrix ist immer mehr als die von P

Q = [4;5;6]; 

ich will nach Split oder umformen Q Größe von P. wenn eine Größe von Pn ist, dann erste n Elemente Q geht in die zweite Spalte der Ausgabe und die übrigen Elemente bis dritten coulmn, während die erste Spalte der Ausgabe ist nichts anderes als P

ich die Ausgabe wie unten brauchen, aber ich kann nicht Verwenden Sie die Umformung, da ich nicht sicher bin, wie groß die beiden Matrizen sind, da sie variieren können.

output = [1 4 6;2 5 0]; 

Könnte mir jemand helfen?

Dank

+0

warum nicht? Sie padieren es einfach mit einer Null, wenn die Größe ungerade ist, und puffern es nicht, wenn die Größe gerade ist, so dass 2 Spalten gemacht werden können, und dann einfach "umformen". – GameOfThrows

+1

Wenn die Größen der Matrizen variieren können, müssen Sie die Größe der Matrix "Q" ein Vielfaches der Größe von "P" machen, indem Sie am Ende Nullen hinzufügen. Dann können Sie sicher umformen. –

+1

Sind Sie sicher, dass das die gewünschte Ausgabe ist? – rayryeng

Antwort

2

Wenn Sie die Communications Toolbox, verwenden vec2mat:

result = vec2mat([P(:); Q(:)], numel(P)).'; 
+0

@SembeiNorimaki Danke für das Heads-Up. Jetzt korrigiert –

2
% first we fill Q with appropiate number of zeros 
% (basically we see how many times Q is bigger than P rounded up) 
new_Q = zeros(numel(P)*ceil(numel(Q)/numel(P)), 1); 
new_Q(1:numel(Q)) = Q; 

% then we create a new matrix containing `P` and the reshaped `new_Q` 

R = [P reshape(new_Q, [numel(P), numel(new_Q)/numel(P)])] 

R = 

    1  4  6 
    2  5  0 

Dies ist für jede Größe von P arbeiten und Q, wenn sie beide anfangs sind Vektoren (nicht Matrizen)

2

Sie können auch die erforderliche Anzahl von Nullen innerhalb der reshape-Anweisung selbst anfügen g in einer einzeiligen Lösung

R = [P reshape([Q; zeros(numel(P) - mod(numel(Q),numel(P)),1)],numel(P),[])]