Как выполнить строку + i?

for i=1:N
   f(i) = 'f'+i;
end

дает ошибку в MatLab. Какой правильный синтаксис для инициализации массива с N строками шаблона fi?

Кажется, что даже это не работает:

for i=1:4
  f(i) = 'f';
end

Ответ 1

Вы можете объединить строки, используя strcat. Если вы планируете конкатенировать числа в виде строк, вы должны сначала использовать num2str для преобразования чисел в строки.

Кроме того, строки не могут быть сохранены в векторе или матрице, поэтому f должен быть определен как массив , и должен индексироваться с помощью { и } (вместо обычных круглых скобок).

f = cell(N, 1);
for i=1:N
   f{i} = strcat('f', num2str(i));
end

Ответ 2

Для версий до R2014a...

Один простой подход без петли заключался бы в использовании 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'

Ответ 3

Позвольте мне добавить еще одно решение:

>> 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'

Ответ 4

в соответствии с это, похоже, вам нужно установить "N" перед тем, как попытаться использовать его, и похоже, что он должен быть int не строка? Не знаю много бит MatLab, но только то, что я собрал с этого сайта. Надеюсь, он помогает:)

Ответ 5

Попробуйте следующее:

for i = 1:4
    result = strcat('f',int2str(i));
end

Если вы используете это для присвоения имени нескольким файлам, которые генерирует ваш код, вы можете связать больше деталей с именем. Например, с расширением в конце и адресом в начале:

filename = strcat('c:\...\name',int2str(i),'.png'); 

Ответ 6

Использование sprintf уже было предложено ldueck в комментарии, но я думаю, что это стоит того, чтобы ответить:

f(i) = sprintf('f%d', i);

Это, на мой взгляд, наиболее читаемое решение, а также дает небольшую гибкость (т.е. когда вы хотите округлить значение float, используйте что-то вроде %.2f).