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 AntwortenBasierend 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