Wie soll das Array fgenau aussehen? Eine einzelne Zeichenfolge, bei der alle einzelnen fiZeichenfolgen miteinander verknüpft sind? Ein Zeichenarray mit einer Zeichenfolge pro Zeile? Ein Zellenarray?
Gnovice
Verwenden Sie für die neueste Version von MATLB Zeichenfolgen. Zum Beispiel "asd" + (1:5)funktioniert dann.
Bonanza
Antworten:
117
Sie können Zeichenfolgen mit verketten strcat. Wenn Sie Zahlen als Zeichenfolgen verketten möchten, müssen Sie zuerst num2strdie Zahlen in Zeichenfolgen konvertieren.
Außerdem können Zeichenfolgen nicht in einem Vektor oder einer Matrix gespeichert werden. Sie fmüssen daher als Zellenarray definiert und mit {und }(anstelle von normalen runden Klammern) indiziert werden .
f = cell(N, 1);
fori=1:N
f{i} = strcat('f', num2str(i));
end
Die Verwendung sprintfwurde 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).
nach dieser sieht es aus wie Sie Satz „N“ haben , bevor Sie versuchen , es zu benutzen und es sieht aus wie ein int nicht Zeichenfolge sein muss? Ich weiß nicht viel über MatLab, aber genau das, was ich von dieser Seite gesammelt habe. Hoffentlich hilft es :)
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:
f
genau aussehen? Eine einzelne Zeichenfolge, bei der alle einzelnenfi
Zeichenfolgen miteinander verknüpft sind? Ein Zeichenarray mit einer Zeichenfolge pro Zeile? Ein Zellenarray?"asd" + (1:5)
funktioniert dann.Antworten:
Sie können Zeichenfolgen mit verketten
strcat
. Wenn Sie Zahlen als Zeichenfolgen verketten möchten, müssen Sie zuerstnum2str
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
quelle
['f', num2str(i)]
ist etwas kürzer.Für Versionen vor R2014a ...
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'
Für neuere Versionen ...
Die Funktion
genvarname
ist veraltet undmatlab.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'
quelle
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 hinzustrtrim(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'
quelle
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
).quelle
nach dieser sieht es aus wie Sie Satz „N“ haben , bevor Sie versuchen , es zu benutzen und es sieht aus wie ein int nicht Zeichenfolge sein muss? Ich weiß nicht viel über MatLab, aber genau das, was ich von dieser Seite gesammelt habe. Hoffentlich hilft es :)
quelle
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');
quelle