for i=1:N
f(i) = 'f'+i;
end
matLabでエラーが発生します。パターンfiのN個の文字列で配列を初期化する正しい構文は何ですか?
これでも機能していないようです:
for i=1:4
f(i) = 'f';
end
簡単な非ループアプローチの1つは、 genvarname
を使用して文字列の セル配列 を作成することです。
>> N = 5;
>> f = genvarname(repmat({'f'}, 1, N), 'f')
f =
'f1' 'f2' 'f3' 'f4' 'f5'
関数genvarname
は非推奨になったため、代わりに matlab.lang.makeUniqueStrings
を次の方法で使用して同じ出力を取得できます。
>> N = 5;
>> f = strrep(matlab.lang.makeUniqueStrings(repmat({'f'}, 1, N), 'f'), '_', '')
f =
1×5 cell array
'f1' 'f2' 'f3' 'f4' 'f5'
別のソリューションを追加します。
>> N = 5;
>> f = cellstr(num2str((1:N)', 'f%d'))
f =
'f1'
'f2'
'f3'
'f4'
'f5'
N
の長さが2桁を超える場合(>= 10
)、余分なスペースを取得し始めます。 strtrim(f)
への呼び出しを追加して、それらを取り除きます。
おまけとして、文書化されていない組み込み関数sprintfc
があり、文字列のセル配列を適切に返します。
>> N = 10;
>> f = sprintfc('f%d', 1:N)
f =
'f1' 'f2' 'f3' 'f4' 'f5' 'f6' 'f7' 'f8' 'f9' 'f10'
sprintf
の使用は、すでにコメントでldueckによって提案されましたが、これは答えになる価値があると思います。
f(i) = sprintf('f%d', i);
私の意見では、これは最も読みやすいソリューションであり、ニースの柔軟性も提供します(つまり、float値を丸める場合は、%.2f
などを使用します)。
this によると、使用する前に "N"を設定する必要があり、文字列ではなくintである必要があるようです。 MatLabについてはあまり知りませんが、そのサイトから集めたものだけです。
以下を試してください:
for i = 1:4
result = strcat('f',int2str(i));
end
コードが生成する複数のファイルの命名にこれを使用すると、より多くの部分を名前に連結できます。たとえば、拡張子が最後に、アドレスが先頭にある場合:
filename = strcat('c:\...\name',int2str(i),'.png');