Comment puis-je ajouter une chaîne à une colonne de tableau Matlab en ce qui concerne?
Voici un extrait de code de ce que j'essaie de faire:
for_loop
filename = 'string';
name=[name; filename]
end
Vous devez utiliser des tableaux de cellules. Si le nombre d'itérations est connu à l'avance, je vous suggère de préallouer:
N = 10;
names = cell(1,N);
for i=1:N
names{i} = 'string';
end
sinon vous pouvez faire quelque chose comme:
names = {};
for i=1:10
names{end+1} = 'string';
end
Comme d'autres réponses l'ont fait remarquer, l'utilisation de tableaux de cellules est probablement l'approche la plus simple, ce qui aura pour conséquence que votre variable name
sera un tableau de cellules où chaque élément de cellule contient une chaîne.
Cependant, il existe une autre option utilisant la fonction STRVCAT , qui concaténera verticalement les chaînes. Au lieu de créer un tableau de cellules, cela créera une matrice de caractères 2D avec chaque ligne contenant une chaîne. STRVCAT complète automatiquement les extrémités des chaînes de caractères avec des espaces pour remplir correctement les lignes de la matrice:
>> string1 = 'hi';
>> string2 = 'there';
>> S = strvcat(string1,string2)
S =
hi
there
Utilisez la fonction strcat
pour ajouter en utilisant un code de ligne sans utiliser de boucle:
A={'food','banana','orange'}
A = 'nourriture' 'banane' 'orange'
A = strcat(A,'s')
A = 'aliments' 'bananes' 'oranges'
Comme indiqué ailleurs, dans MATLAB, toutes les chaînes d'un tableau doivent avoir la même longueur. Pour avoir des chaînes de différentes longueurs, utilisez un tableau de cellules:
name = {};
for i = somearray
name = [name; {string}];
end
name=[];
for_loop
filename = 'string';
name=[name; {filename}];
end
Pour être complet, il convient également de mentionner le nouveau string
class introduit dans MATLAB R2016b; un conteneur pour les données de texte avec un ensemble de fonctions pour une manipulation facile du texte.
Pour le comparer à mon autre exemple , voici comment allouer un tableau de chaînes :
N = 10;
names = strings(1,N);
for i=1:N
names(i) = 'string';
end
Et voici comment développer dynamiquement le tableau sans préallocation:
names = strings(0);
for i=1:10
names(end+1) = 'string';
end
(Bien sûr, si les chaînes sont toutes identiques ou forment une séquence avec un motif, il existe de meilleures façons de créer le tableau sans boucle. Ce qui précède n'était qu'un exemple de remplissage du tableau un par un).
Le conteneur string
peut également être converti en/à partir de tableaux de caractères et tableaux de cellules de caractères .
Si vous utilisez deux tableaux comme ci-dessous (A et B), vous pouvez les ajouter comme ce que vous faites avec d'autres matrices.
A = {'a' ; 'b' ; 'c'};
B = {'1' ; '2' ; '3'};
Result = { A{:,1} ; B{:,1} }
Result =
'a' 'b' 'c'
'1' '2' '3'
Je sais que c'est un vieux fil, mais il semble que vous n'avez même pas besoin d'une boucle si c'est tout ce que vous faites dans la boucle. Pourriez-vous simplement utiliser une concaténation verticale?
mmm = {'str1'; 'str2'; 'str3'};
temp = {'a'; 'b'; 'c'};
mmm = [mmm; temp]
mmm =
'str1'
'str2'
'str3'
'a'
'b'
'c'