for i=1:N
f(i) = 'f'+i;
end
дает ошибку в MatLab. Какой правильный синтаксис для инициализации массива с N строками шаблона fi?
Кажется, что даже это не работает:
for i=1:4
f(i) = 'f';
end
for i=1:N
f(i) = 'f'+i;
end
дает ошибку в MatLab. Какой правильный синтаксис для инициализации массива с N строками шаблона fi?
Кажется, что даже это не работает:
for i=1:4
f(i) = 'f';
end
Вы можете объединить строки, используя strcat
. Если вы планируете конкатенировать числа в виде строк, вы должны сначала использовать num2str
для преобразования чисел в строки.
Кроме того, строки не могут быть сохранены в векторе или матрице, поэтому f
должен быть определен как массив , и должен индексироваться с помощью {
и }
(вместо обычных круглых скобок).
f = cell(N, 1);
for i=1:N
f{i} = strcat('f', num2str(i));
end
Один простой подход без петли заключался бы в использовании 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
длиннее двух цифр (>= 10
), вы начнете получать дополнительные пробелы. Добавьте вызов strtrim(f)
, чтобы избавиться от них.
В качестве бонуса существует недокументированная встроенная функция sprintfc
, которая прекрасно возвращает массивы ячеек строк:
>> N = 10;
>> f = sprintfc('f%d', 1:N)
f =
'f1' 'f2' 'f3' 'f4' 'f5' 'f6' 'f7' 'f8' 'f9' 'f10'
в соответствии с это, похоже, вам нужно установить "N" перед тем, как попытаться использовать его, и похоже, что он должен быть int не строка? Не знаю много бит MatLab, но только то, что я собрал с этого сайта. Надеюсь, он помогает:)
Попробуйте следующее:
for i = 1:4
result = strcat('f',int2str(i));
end
Если вы используете это для присвоения имени нескольким файлам, которые генерирует ваш код, вы можете связать больше деталей с именем. Например, с расширением в конце и адресом в начале:
filename = strcat('c:\...\name',int2str(i),'.png');
Использование sprintf
уже было предложено ldueck в комментарии, но я думаю, что это стоит того, чтобы ответить:
f(i) = sprintf('f%d', i);
Это, на мой взгляд, наиболее читаемое решение, а также дает небольшую гибкость (т.е. когда вы хотите округлить значение float, используйте что-то вроде %.2f
).