2017-03-25 7 views
0

in einem zwei Vektoren kombinieren Ich habe zwei VektorenMatlab: Wie

A = [...] %size 1x320 
B = [...] %size 1x192 

ich die beiden Vektoren in einem kombinieren möchte, aber die Art, wie ich möchte, dass sie kombinieren, ist die folgende:

Nehmen die ersten 5 Elemente von Vektor A fügen dann 3 Elemente von Vektor B hinzu, fügen die nächsten 5 Elemente von Vektor A hinzu und fügen dann das nächste Element von Vektor B usw. hinzu, bis beide Vektoren in einem vereinigt sind. Ich denke, der Prozess sollte 64 Mal seit 320/5=64 und 192/3=64 wiederholt werden.

Gibt es eine eingebaute Matlab-Funktion, um das zu tun?

+0

Siehe meine Bearbeitung für eine zweite Lösung, die keine For-Schleifen beinhaltet. –

Antwort

1

Ich glaube nicht, dass es eine eingebaute Funktion, die genau das tut, aber das Folgende tun, was Sie wollen:

A=randi(10,1,320); 
B=randi(10,1,192); 
C=zeros(1,length(A)+length(B)); 
for i=1:5 
    C(i:8:end)=A(i:5:end); 
end 
for i=6:8 
    C(i:8:end)=B(i-5:3:end); 
end 

Dann wird das Array C ist die kombinierte Array.

Edit: Eine andere Möglichkeit, das zu tun, ohne für Schleifen:

A=randi(10,1,320); 
B=randi(10,1,192); 
A_new=reshape(A,5,[]); 
B_new=reshape(B,3,[]); 
C=[A_new;B_new]; 
C=reshape(C,[1,numel(C)]); 

Bei dieser Lösung durch den dritten Parameter in reshape(A,5,[]) Angabe [] zu sein, erlauben wir es, die Anzahl der Spalten nach der einzustellen Länge von A, vorausgesetzt, dass die Anzahl der Zeilen im neu gestalteten Array 5 beträgt. Zusätzlich ist numel(C) die Gesamtzahl der Elemente im Array C. Daher kann diese Lösung leicht auf eine höhere Anzahl von Arrays verallgemeinert werden.