Ich bin neu in MATLAB und ich kämpfen, um die Feinheiten zwischen Array-weise und klug Element Operationen zu verstehen. Ich arbeite mit einer großen Datenmenge, und ich habe die einfachsten Methoden sind nicht immer die schnellste gefunden. Ich habe eine sehr große Zelle Array von Strings, wie in diesem vereinfachten Beispiel:Substrings aus einem Zellenfeld in Matlab
% A vertical array of same-length strings
CellArrayOfStrings = {'aaa123'; 'bbb123'; 'ccc123'; 'ddd123'};
Ich versuche, eine Reihe von Teilstrings zu extrahieren, zum Beispiel:
'a1'
'b1'
'c1'
'd1'
Ich bin glücklich genug, um mit ein Element weise Referenz wie folgt:
% Simple element-wise substring operation
MySubString = CellArrayOfStrings{2}(3:4); % Expected result is 'b1'
aber ich kann die Notation nicht funktioniert, sie alle auf einmal zu verweisen, wie folgt aus:
% Desired result is 'a1','b1','c1','d1'
MyArrayOfSubStrings = CellArrayOfStrings{:}(3:4); % Incorrect notation!
Ich weiß, dass Matlab sehr schnelle Array-weise Operationen ausführen kann, wie strcat, so hoffte ich auf eine Technik, die mit einer ähnlichen Geschwindigkeit arbeitet:
% An array-wise operation which works quickly
tic
speedTest = strcat(CellArrayOfStrings,'hello');
toc % About 2 seconds on my machine with >500K array elements
Alle die für Schleifen und Funktionen, die hinter den Kulissen Iteration verwende ich laufen zu langsam mit meinem Dataset versucht haben. Gibt es eine array-weise Notation, die das tun würde? Würde jemand in der Lage sein, mein Verständnis von elementweise und Array-weise Operationen zur Korrektur ?! Danke vielmals!
ich danke Ihnen für Ihre umfassende Antwort, die sowohl meine Frage beantwortet als auch meinem Verständnis geholfen hat. Am Ende wählte ich Option 3, welche die beste Option für meine Datenmenge und Funktion zu sein schien: Ich fand, dass die Verwendung einer For-Schleife innerhalb meiner Funktion (Option 1) ungefähr 4x langsamer war als die Funktion mit cellfun (Option 2). Ich habe Option 3 gewählt, weil ich den anderen Jungs, die das benutzen wollen, nicht cellfun erklären muss :). Danke auch an Dan und Moshen, die ähnliche Antworten lieferten. – fodfish
Kühl. Also von (1) Direktzugriff auf Zeile, Spalte, Teilzeichenfolge in einem 2d-Zellenarray, erzeugt von CellArray = textscan (fid, format) wobei col eine Textspalte wäre CellArray {col} {row} (3: 4). –