Wie füge ich einen String an ein Matlab-Array an?
Hier ist ein kleiner Code-Ausschnitt von dem, was ich versuche zu tun:
for_loop
filename = 'string';
name=[name; filename]
end
Sie müssen Zellenarrays verwenden. Wenn die Anzahl der Iterationen vorher bekannt ist, schlage ich vor, dass Sie eine Zuweisung vornehmen
N = 10;
names = cell(1,N);
for i=1:N
names{i} = 'string';
end
sonst kannst du so etwas machen:
names = {};
for i=1:10
names{end+1} = 'string';
end
Wie andere Antworten bereits erwähnt haben, ist die Verwendung von cell arrays wahrscheinlich der einfachste Ansatz, der dazu führt, dass Ihre Variable name
ein Zellenarray ist, in dem jedes Zellenelement einen String enthält.
Es gibt jedoch eine weitere Option, die die Funktion STRVCAT verwendet, mit der Zeichenfolgen vertikal verkettet werden. Anstatt ein Zellenarray zu erstellen, wird eine 2D-Zeichenmatrix erstellt, in der jede Zeile eine Zeichenfolge enthält. STRVCAT füllt bei Bedarf automatisch die Enden der Zeichenfolgen mit Leerzeichen auf, um die Zeilen der Matrix korrekt auszufüllen:
>> string1 = 'hi';
>> string2 = 'there';
>> S = strvcat(string1,string2)
S =
hi
there
Verwenden Sie die Funktion strcat
, um einen Zeilencode ohne Schleife zu verwenden:
A={'food','banana','orange'}
A = 'Essen' 'Banane' 'Orange'
A = strcat(A,'s')
A = 'Lebensmittel' 'Bananen' 'Orangen'
Wie bereits erwähnt, müssen in MATLAB alle Zeichenfolgen in einem Array die gleiche Länge haben. Um Strings unterschiedlicher Länge zu haben, verwenden Sie ein Zellenarray:
name = {};
for i = somearray
name = [name; {string}];
end
name=[];
for_loop
filename = 'string';
name=[name; {filename}];
end
Der Vollständigkeit halber sollte auch die neue string
-Klasse erwähnt werden, die in MATLAB R2016b eingeführt wurde. ein Container für Textdaten zusammen mit einer Reihe von Funktionen zur einfachen Textbearbeitung.
Um es mit meinem anderem Beispiel zu vergleichen, können Sie ein string -Array zuordnen:
N = 10;
names = strings(1,N);
for i=1:N
names(i) = 'string';
end
Und so können Sie das Array ohne Vorbelegung dynamisch erweitern:
names = strings(0);
for i=1:10
names(end+1) = 'string';
end
(Natürlich, wenn die Zeichenfolgen alle gleich sind oder eine Sequenz mit einem Muster bilden, gibt es bessere Möglichkeiten, das Array ohne Schleife zu erstellen. Das obige Beispiel war nur ein Beispiel, um das Array einzeln zu füllen).
Der Container string
kann auch in/von Zeichenarrays und Zellenarrays von Zeichen konvertieren.
Wenn Sie zwei Arrays wie unten (A und B) verwenden, können Sie diese wie bei anderen Matrizen anhängen.
A = {'a' ; 'b' ; 'c'};
B = {'1' ; '2' ; '3'};
Result = { A{:,1} ; B{:,1} }
Result =
'a' 'b' 'c'
'1' '2' '3'
Ich weiß, dass dies ein alter Thread ist, aber es scheint, als ob Sie nicht einmal eine Schleife benötigen, wenn Sie dies alles in der Schleife tun. Könnten Sie einfach eine vertikale Verkettung verwenden?
mmm = {'str1'; 'str2'; 'str3'};
temp = {'a'; 'b'; 'c'};
mmm = [mmm; temp]
mmm =
'str1'
'str2'
'str3'
'a'
'b'
'c'