web-dev-qa-db-fra.com

Ajout d'une chaîne à un tableau Matlab

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
29
Name

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
81
Amro

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
9
gnovice

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'

4
bornTalented

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
4
lindelof
name=[];
for_loop
    filename = 'string';
    name=[name; {filename}];
end
3
Babak

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 .

1
Amro

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'
1
MJay

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'
0
Jon Tran