2013-08-09 4 views
4

Может ли кто-нибудь рассказать, существует ли способ переименовать переменную в каждой итерации цикла в MATLAB?Как переименовать переменную в цикле в MATLAB?

На самом деле, я хочу сохранить переменную в цикле с другим именем, включающим индекс цикла. Благодарю.

+0

Сделайте вектор 'foo' соответствующего размера и сохраните его в' foo (loopidx) '? –

+1

@MarcClaesen, Привет Марк. Спасибо, но это не так, как я хочу. Это должно быть что-то вроде: var_i, где «i» - текущий индекс цикла. Мне нужно сохранить каждую из этих переменных в файле MAT. – Sanchit

ответ

12

основе ваш комментарий, я предлагаю использовать cell array. Это позволяет хранить любой тип результата по индексу. Например:

foo=cell(bar,1); 
for ii=1:bar 
    foo{ii}=quux; 
end 

Вы можете сохранить foo сохранить все промежуточные результаты. Хотя индекс цикла не запекается в имя переменной, как вы хотите, это предлагает идентичную функциональность.

+5

+1: ... в большинстве случаев лучше избегать eval, потому что иногда eval - это зло ... –

8

Игнорируя вопрос "? Зачем вам это нужно", вы можете использовать eval() функцию:

Пример:

for i = 1:3 
    eval(['val' num2str(i) '=' num2str(i * 10)]); 
end 

Выход:

val1 = 
    10 

val2 = 
    20 

val3 = 
    30 
+1

Хотя это возможно, обычно это не рекомендуется, см. Http://matlab.wikia.com/wiki/FAQ#How_can_I_create_variables_A1.2C_A2.2C....2CA10_in_a_loop.3F. Ответ Marc Claesean - правильный способ сделать это. – am304

0

Другой способ, используя-структуру, чтобы сохранить индекс цикла во имя поля:

for ii=1:bar 
    foo.(["var" num2str(ii)]) = quux; 
end 

Это создает структуру с полями, как foo.var1, foo.var1 и т.д. Это делает то, что вы хотите без использования eval.

Смежные вопросы