Jetzt mache ich eine Reihe von Operationen auf dem Keyset, die zurück geben
%Vor%Ich habe das folgende müde:
%Vor%All das gab im letzten Zellenfeld seltsame Ergebnisse. Ich brauche nur die Ganzzahlen, die als Schlüssel für eine andere Container-Map verwendet werden.
Ich schlage 5 zusätzliche Lösungen vor, von denen drei 4-5x schneller sind als die bisher vorgeschlagenen Lösungen. Die Lehren daraus sind:
num2str
ist langsam cellfun
und arrayfun
können erheblichen Overhead hinzufügen Die drei leistungsstärksten Lösungen sind in Bezug auf die Leistung sehr ähnlich:
Looping zum Zuweisen von Zellenelementen
%Vor% Konvertiert alles in eine Zeichenkette und ruft textscan
Konvertiert alles in string und ruft regexp
auf.
Hier ist der vollständige Testcode mit Timings:
%Vor%Wie wäre es mit:
%Vor%Ich bin mir nicht sicher, ob dies der eleganteste Weg ist, um die gewünschten Ergebnisse zu erzielen, aber es scheint zu funktionieren ...
Laufzeit mit Eitans Lösung vergleichen:
%Vor%Erträge:
%Vor%Es scheint, als wäre die vorgeschlagene Lösung schneller.
Hinweis: Die aktuelle Implementierung von cellfun
scheint nicht auf Geschwindigkeit optimiert zu sein. Es wird gemunkelt, dass Mathworks in zukünftigen Versionen eine bessere Implementierung von cellfun
einführen möchte. Daher ist Eitans Lösung in der aktuellen Version möglicherweise nicht optimal, aber es scheint eine gute Übung für Matlab-Fähigkeiten zu sein.
Es wurde herausgefunden, wie die Regexp-Lösung für große Ganzzahlen mithilfe der Split-Funktionalität verbessert werden kann. Auch wurde ich durch eine von Jonas 'Lösungen, die nicht alle Sprintf-Aufrufe in der for-Schleife ausgewertet hat, etwas in die Irre geführt. Edit: fügte auch die neue String-Funktionalität für 2016 hinzu, die in den Kommentaren vorgeschlagen wird.
%Vor%Die Regexp-Lösung mit Split ergibt eine etwas bessere Performance und die String-Methode ist noch schneller:
%Vor%