Ответ 1
Вы можете сделать это с помощью eval, но вы действительно должны не
eval(['x', num2str(i), ' = ', num2str(i)]); %//Not recommended
Скорее используйте массив ячеек:
x{i} = i
Предположим, что я хочу создать 10 переменных, которые выглядели бы так:
x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
.
.
xi = i;
Это упрощенная версия того, что я намереваюсь сделать. В принципе, я просто хочу сохранить коды кода, создав эти переменные автоматическим способом. Есть ли возможность построить имя переменной в Matlab? Образец в моем примере будет ["x", num2str(i)]
. Но я не могу найти способ создать переменную с этим именем.
Вы можете сделать это с помощью eval, но вы действительно должны не
eval(['x', num2str(i), ' = ', num2str(i)]); %//Not recommended
Скорее используйте массив ячеек:
x{i} = i
Я также настоятельно рекомендую использовать массив ячеек или структуру для таких случаев. Я думаю, что это даже даст вам некоторое повышение производительности.
Если вам действительно нужно это сделать, Дэн рассказал, как это сделать. Но я хотел бы также указать на функцию genvarname
. Он будет гарантировать, что ваша строка является допустимым именем переменной.
EDIT: genvarname является частью ядра, а не инструментария статистики
for k=1:10
assignin('base', ['x' num2str(k)], k)
end
Если кому-то еще интересно, правильный синтаксис ответа от Dan:
eval(['x', num2str(i), ' = ', num2str(i)]);
В моем вопросе уже содержится неправильный синтаксис, так что это моя ошибка.
Хотя это давно назрело, я просто хотел добавить еще один ответ.
функция genvarname предназначена именно для этих случаев
и если вы используете его с массивом структуры tmp, вам не понадобится eval cmd
пример 4 из этой ссылки: как это сделать http://www.mathworks.co.uk/help/matlab/ref/genvarname.html
for k = 1:5
t = clock;
pause(uint8(rand * 10));
v = genvarname('time_elapsed', who);
eval([v ' = etime(clock,t)'])
end
все лучшее
Eyal
Мне нужно было что-то вроде этого, потому что вы не можете ссылаться на структуры (или массивы ящиков, которые, как я полагаю), из рабочей области в блоках Simulink, если вы хотите иметь возможность изменять их во время моделирования.
В любом случае, для меня это лучше всего работало
assignin('base',['string' 'parts'],values);