Statt X(i) ist X{i} besser hier. Eine Pre-Allocation ist grundsätzlich eine bessere Methode. Length() nimmt immer die größte Dimension, also wäre size(X, 1) besser.
Code:
X = {'1','a'; '2','b'};
a = zeros(1, size(X, 1)); % Pre-allocation for k = size(X, 1)
a(k) = sscanf(X{k}, '%f'); % Schneller als STR2DOUBLE end
Das Problem ist allerdings nicht die Spalte zu extrahieren und von string zu double zu konvertieren sondern das ganze wieder zurück in den Array zu packen, also zusammen mit der zweiten Spalte, ('a','b', etc.) wieder in einen Array zu packen, oder anders ausgedrückt: ich möchte (nur) die erste Spalte von string zu double konvertieren, die zweite Spalte beibehalten.
Vielen Dank für Deine Antwort. Wie schon bei Cem geschrieben, liegt/lag das Problem nicht in der Konvertierung an sich sondern am zurückschreiben, sprich die konvertierten Spalten wieder mit den unkonvertierten zusammenzubringen. Ich habe jetzt etwas rumprobiert und eine Lösung gefunden bei der man auch auswählen kann, welche Spalte konvertiert werden soll:
Code:
X={'1','5','a';'2','6','b';'3','7','c';'4','8','d'}
i=2 %Spalte, die konvertiert werden soll
for k = 1:size(X, 1)
X(k,i) = {sscanf(X{k,i}, '%f')}; % Schneller als STR2DOUBLE end
Nun wird nicht mehr auf der rechten Seite ein {1x1} Cell Array erzeugt, sondern das konvertierte Element direkt in das Cell hineingeschrieben. Wenn es um 4 Elemente geht, spielt das keine Rolle. Aber vielleicht wird die Funktion ja auch für 10^9 Cell-Elemente verwendet und die Laufzeit wird relevant.
Gruß, Jan
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.