Je suis nouveau à MATLAB et j'ai du mal à comprendre les subtilités entre les opérations de type array et wise. Je travaille avec un grand ensemble de données et j'ai trouvé que les méthodes les plus simples ne sont pas toujours les plus rapides. J'ai un très grand réseau de cellules de cordes, comme dans cet exemple simplifié:Sous-chaînes d'une matrice de cellules dans Matlab
% A vertical array of same-length strings
CellArrayOfStrings = {'aaa123'; 'bbb123'; 'ccc123'; 'ddd123'};
Je suis en train d'extraire un tableau de sous-chaînes, par exemple:
'a1'
'b1'
'c1'
'd1'
Je suis assez satisfait une référence élément par élément comme celui-ci:
% Simple element-wise substring operation
MySubString = CellArrayOfStrings{2}(3:4); % Expected result is 'b1'
Mais je ne peux pas travailler la notation pour les référencer en une seule fois, comme ceci:
% Desired result is 'a1','b1','c1','d1'
MyArrayOfSubStrings = CellArrayOfStrings{:}(3:4); % Incorrect notation!
Je sais que Matlab est capable d'effectuer des opérations de sage de tableau très rapides, comme strcat, donc j'espérais une technique qui fonctionne à une vitesse similaire:
% An array-wise operation which works quickly
tic
speedTest = strcat(CellArrayOfStrings,'hello');
toc % About 2 seconds on my machine with >500K array elements
Toutes les boucles for et Les fonctions qui utilisent l'itération en coulisses J'ai essayé de courir trop lentement avec mon jeu de données. Y a-t-il une notation en tableau qui ferait cela? Est-ce que quelqu'un serait capable de corriger ma compréhension des opérations élément par élément et par groupe? Merci beaucoup!
merci pour votre réponse complète, qui à la fois répondu à ma question et m'a aidé à comprendre. Finalement, j'ai choisi l'option 3, qui semblait la meilleure option pour mon jeu de données et ma fonction: J'ai trouvé que l'utilisation d'une boucle For dans ma fonction (option 1) était environ 4x plus lente que l'appel de cellfun (option 2). J'ai choisi l'option 3 parce que je ne voulais pas avoir à expliquer cellfun aux autres gars qui vont l'utiliser :). Merci également à Dan et Moshen qui ont fourni des réponses similaires. – fodfish
Cool. Donc, depuis (1) l'accès direct à la ligne, col, sous-chaîne dans un tableau de cellules 2d produit par CellArray = textscan (fid, format) où col est une colonne de texte serait CellArray {col} {row} (3: 4). –