2016-04-07 12 views
1

Betrachten Sie ein 1D-Array: y (1:20) und eine Sammlung von Indizes in einer Matrixform: indx = [1,3; 7,12; 16,19]Indexmatrix basierend auf einer anderen Matrix von Start- und Endindizes

Gibt es eine gute Möglichkeit, ein Zellenarray zu erhalten: {y (1: 3), y (7:12), y (16:19)}?

Es ist einfach mit Schleifen, aber ich bin neugierig, eine einfache und eine sauberere Möglichkeit zu kennen, eine Sammlung von Indizes zu 1D-Array zu übergeben.

Antwort

1

Ich glaube nicht, dass es eine Möglichkeit gibt, Schleifen zu verwenden. Sie können allerdings arrayfun als Abkürzung verwenden:

arrayfun(@(from,to) y(from:to), indx(:,1), indx(:,2), 'uni', 0) 

diese Ergebnisse auf Ihre Daten laufen in

y = (1:20)*10; 
indx = [1,3;7,12;16,19]; 

celldisp(arrayfun(@(from,to) y(from:to), indx(:,1), indx(:,2), 'uni', 0)) 

ans{1} = 

    10 20 30 



ans{2} = 

    70 80 90 100 110 120 



ans{3} = 

    160 170 180 190 
+1

Vielleicht besser lesbar: 'arrayfun (@ (von, bis) y (von: bis), indx (:, 1), indx (:, 2), 'uni', 0) ' –

+0

@Dan, es sieht gut aus. Ich werde es versuchen. Danke vielmals! –

+0

@ O'Neil Ja, das sieht besser aus. Ich werde es bearbeiten. – Dan

Verwandte Themen