Erstelle einen Indexvektor basierend auf Start- und Stoppwerten [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Effizienter Doppelpunktoperator für mehrere Start- und Endpunkte 4 Antworten

Basierend auf einer Matrix, die mehrere Zeilen des Anfangs (erste Spalte) und des Endes (zweite Spalte) eines Indexintervalls enthält, möchte ich einen Vektor des gesamten Index erstellen. Zum Beispiel, wennA = [2 4; 8 11 ; 12 16], Ich hätte gerne den folgenden Vektorindex = [2 3 4 8 9 10 11 12 13 14 15 16].

Ich suche nach dem schnellsten Weg, das zu tun. Im Moment habe ich nur zwei Möglichkeiten gefunden:

1) mit einer Schleife

index = [];
for n = 1:size(A, 1)
    index = [index A(n, 1):A(n, 2)];
end

2) mitarrayfun

index = cell2mat(arrayfun(@(n) A(n, 1):A(n, 2), 1:size(A, 1), 'uni', 0));

nteressanterweiarrayfun ist viel schneller als die Loop-Version, und ich weiß nicht warum. Außerdem verwende ich eine Konvertierung von cell zu mat, das ist also komisch. Was denkst du darüber? Haben Sie noch weitere Vorschläge?

Thanx für deine Hilfe

Antworten auf die Frage(4)

Ihre Antwort auf die Frage