for i=1:N
f(i) = 'f'+i;
end
gibt einen Fehler in MatLab. Was ist die richtige Syntax, um ein Array mit N Zeichenfolgen des Musters fi zu initialisieren?
Es scheint, als würde auch dies nicht funktionieren:
for i=1:4
f(i) = 'f';
end
for i=1:N
f(i) = 'f'+i;
end
gibt einen Fehler in MatLab. Was ist die richtige Syntax, um ein Array mit N Zeichenfolgen des Musters fi zu initialisieren?
Es scheint, als würde auch dies nicht funktionieren:
for i=1:4
f(i) = 'f';
end
"asd" + (1:5)
funktioniert dann.
Antworten:
Sie können Zeichenfolgen mit verketten strcat
. Wenn Sie Zahlen als Zeichenfolgen verketten möchten, müssen Sie zuerst num2str
die Zahlen in Zeichenfolgen konvertieren.
Außerdem können Zeichenfolgen nicht in einem Vektor oder einer Matrix gespeichert werden. Sie f
müssen daher als Zellenarray definiert und mit {
und }
(anstelle von normalen runden Klammern) indiziert werden .
f = cell(N, 1);
for i=1:N
f{i} = strcat('f', num2str(i));
end
['f', num2str(i)]
ist etwas kürzer.
Ein einfacher Ansatz ohne Schleife wäre das genvarname
Erstellen eines Zellenarrays von Zeichenfolgen:
>> N = 5;
>> f = genvarname(repmat({'f'}, 1, N), 'f')
f =
'f1' 'f2' 'f3' 'f4' 'f5'
Die Funktion genvarname
ist veraltet und matlab.lang.makeUniqueStrings
kann daher folgendermaßen verwendet werden, um dieselbe Ausgabe zu erhalten:
>> N = 5;
>> f = strrep(matlab.lang.makeUniqueStrings(repmat({'f'}, 1, N), 'f'), '_', '')
f =
1×5 cell array
'f1' 'f2' 'f3' 'f4' 'f5'
genvarname
.
genvarname
ist veraltet.
Lassen Sie mich eine weitere Lösung hinzufügen:
>> N = 5;
>> f = cellstr(num2str((1:N)', 'f%d'))
f =
'f1'
'f2'
'f3'
'f4'
'f5'
Wenn N
es länger als zwei Ziffern ist ( >= 10
), erhalten Sie zusätzliche Leerzeichen. Fügen Sie einen Anruf hinzu strtrim(f)
, um sie loszuwerden.
Als Bonus gibt es eine undokumentierte integrierte Funktion, sprintfc
die ein Zellenarray von Zeichenfolgen gut zurückgibt:
>> N = 10;
>> f = sprintfc('f%d', 1:N)
f =
'f1' 'f2' 'f3' 'f4' 'f5' 'f6' 'f7' 'f8' 'f9' 'f10'
Die Verwendung sprintf
wurde bereits von ldueck in einem Kommentar vorgeschlagen, aber ich denke, dies ist eine Antwort wert:
f(i) = sprintf('f%d', i);
Dies ist meiner Meinung nach die am besten lesbare Lösung und bietet auch eine gute Flexibilität (dh wenn Sie einen Float-Wert runden möchten, verwenden Sie so etwas wie %.2f
).
Versuche Folgendes:
for i = 1:4
result = strcat('f',int2str(i));
end
Wenn Sie dies zum Benennen mehrerer Dateien verwenden, die Ihr Code generiert, können Sie weitere Teile mit dem Namen verknüpfen. Zum Beispiel mit der Erweiterung am Ende und der Adresse am Anfang:
filename = strcat('c:\...\name',int2str(i),'.png');
f
genau aussehen? Eine einzelne Zeichenfolge, bei der alle einzelnenfi
Zeichenfolgen miteinander verknüpft sind? Ein Zeichenarray mit einer Zeichenfolge pro Zeile? Ein Zellenarray?