2017-01-12 2 views
1

Ich würde sehr appreciate, wenn Sie helfen. Ich bin Anfänger im Programmieren. Ich benutze Matlab. Also, ich habe ein Array vom Typ 431x1 - double; da habe ich die Nummern 1 bis 6; für zB: 1 ​​4 5 3 2 6 6 3 3 5 4 1 ...; was ich tun möchte, ist, ich muss ein neues Array erstellen, wo ich jedes Element für 11 Mal wiederholen würde; für zB: a (1:11) = 1; a (12:22) = 4; a (23:33) = 5; oder anders zu illustrieren: a = [1 1 1 1 1 1 1 1 1 1 4 4 4 4 4 4 4 4 ...]; Ich habe versucht, es in einer Schleife zu tun, aber hatte einige Probleme, welchen Weg könnten Sie vorschlagen, kennen Sie irgendeine Funktion, die ich ausnutzen könnte?Matlab macht Wiederholungen von Daten von einem Array in ein anderes Array

+0

Sie können [Repelem] (https://www.mathworks.com/help/matlab/ref/repelem.html) verwenden – rahnema1

Antwort

0

Zunächst einmal würde es helfen, wenn Sie Ihren Code ist separate Blöcke formatieren könnte Ihre Frage leichter zu lesen ...


Angenommen, Sie haben eine Reihe von Länge N × 1 wie gehabt:

x = [1 2 3 4 5 ...]'; 

Sie könnten eine Schleife konstruieren und verketten wie:

for i = 1 : length(x) 

for i = 1: length(x) 
    y(1 + (i - 1) * 11 : 1 + i * 11) = x(i); % Copy to a moving block 
end 
y(end) = []; % Delete the superfluous one at the end 

Sie auch Funktionen l aussehen könnte ike repmat in der MATLAB-Hilfe zum Replizieren von Arrays.

+0

danke! Ich versuchte auch mit repmat in einer Schleife, aber wieder hatte ich Probleme mit der richtigen Indizierung, um die replizierten Werte zu speichern; –

0

Versuchen Sie, diese (NRep ist, wie oft Sie wollen, dass es wiederholt):

x = [1, 2, 3, 4, 5]; 
NRep = 5; 
y = reshape(repmat(x,[NRep,1]),[1,length(x)*NRep]) 

Da es ein wenig umständlich ist, dass zu schreiben, habe ich auch besonders genießen, diese verwenden „Hack“:

x = [1, 2, 3, 4, 5]; 
NRep = 5; 
y = kron(x, ones(1,NRep)); 

Hoffe, dass hilft!

S.S .: Dies ist nur für Zeilenvektoren gedacht. Wenn Sie jedoch Spaltenvektoren benötigen, können Sie diese leicht ändern.

bearbeiten: Natürlich, wenn Sie nach R2015a sind, können Sie einfach y=repelem(x,NRep) verwenden. Ich tendiere dazu, diese zu vergessen, weil ich an älteren Matlabs arbeite (und manchmal ist es nicht so eine schlechte Idee, ein wenig abwärtskompatibel zu sein). Danke @ rahnema1 für die Erinnerung.

+0

vielen dank !!! Dies ist die Repelem-Funktion, von der ich nicht wusste, dass sie genau das ist, was ich brauchte: D yayy, dein Code hat auch funktioniert, gibt die richtige Anzahl von Wiederholungen, aber das Problem war, dass er die ganze Sequenz 11 Mal wiederholt anstatt jedes Element 11 Mal zu replizieren; trotzdem vielen Dank! –

Verwandte Themen