2017-02-23 6 views
0

Sehr einfache Frage, aber ich nichts gefunden ...Vectorized Schleife in Matlab

Ich habe meinen Code in verschiedenen Abschnitten aufgeteilt und die folgende Art und Weise ausgeführt werden, weil einige Matrizen aufgebaut sind von links nach rechts und einige von rechts nach links über Rückwärtsinduktion. wenn ich es in 3 Abschnitten Zum Beispiel spalten, würde ich die Abschnitte in dieser Reihenfolge ausführen:

1, 2, 3, 

1, 2, 

1, 

1, 2, 

1, 2, 3. 

Also muß ich einen Vektor [1, 2, 3, 1, 2, 1, 1, 2, 1 , 2, 3]. Da aber die Anzahl der Abschnitte ist viel größer als 3 ist, möchte ich eine allgemeine Vektor bauen, das geht:

1 : noSections 

1 : noSections - 1 

... 

1 

... 

1 : noSections 

Wie würde ich das tun?

+0

In einem Satz: Ich möchte einen Vektor bauen [1: noSections, 1: noSections-1, 1: noSections -2, ..., 1: 1, 1: 2, 1: 3, ..., 1: keineSektionen]. – LenaH

Antwort

3

Sie können arrayfun verwenden, die für Ihre Arbeit ziemlich nett ist.

cell2mat(arrayfun(@(x)1:x, [n:-1:1 2:n], 'UniformOutput', false)) 

Erläuterung:

[n:-1:1 2:n] % create the vector for the last element of each row, i.e. the vector [n, n-1, ..., 1, 2, ..., n] 

@(x)1:x % Generate a 1:x vector for each x, this is done for each element of the previous vector 

Für Ihr Beispiel:

n = 3; 
cell2mat(arrayfun(@(x)1:x, [n:-1:1 2:n], 'UniformOutput', false)) 

ans = 

    1  2  3  1  2  1  1  2  1  2  3 
+0

Super, das wird den Job machen, vielen Dank! – LenaH