У меня есть переменная a = 1
. Я хочу генерировать имя переменной формы:
variableNumber
Таким образом в этом примере, я хотел бы
a1
a2
a3
как переменные. Как я могу сделать это?
Попробуйте genvarname
varname = genvarname(str)
- это основной синтаксис для использования. В документации MATLAB есть подробные примеры использования этой функции со списком исключений (для обеспечения уникальности имен переменных). Вам придется использовать eval
или другую функцию (например, assignin
, упомянутую в предыдущем ответе) для использования этого имени переменной.
Чтобы полностью ответить на вопрос,
varnamelist = genvarname({'a','a','a','a','a'});
for l=1:length(varnamelist)
eval([varnamelist{l} '= l^2']);
end
Конечно, есть более эффективные способы составления списка ввода для genvarname
, это оставим как упражнение ;)
Если вас беспокоит производительность, обратите внимание, что eval
может сильно замедлить работу скрипта/функции; лично я бы рекомендовал использовать типы данных struct или cell, если вам нужно динамическое именование переменных.
Используйте assignin
.
assignin('base', sprintf('variable%d', 1), 1:10)
EDIT: Как упоминал JS, структуры, как правило, лучше подходят для динамических имен полей. Вы можете использовать их следующим образом:
varnames = {'foo', 'bar'};
str = struct;
for i = 1:length(varnames)
str = setfield(str, varnames{i}, rand); %#ok<SFLD>
end
str =
foo: 0.4854
bar: 0.8003
Или даже проще, например:
str2.('alpha') = 123;
str2.('beta') = 1:10;
Мой ответ на этот вопрос: «Вы уверены, что действительно хотите это сделать?»
Если у вас есть ряд подобных переменных, тогда у вас будет чтобы найти способ ссылаться на все эти переменные позже, это, вероятно, будет означать EVAL или что-то еще в этом роде.
Если вы знаете, что все, что вы будете хранить в нем, будет скаляром, вы можете сохранить их все в векторе:
a(1) = 1;
a(2) = 2;
a(3) = 3;
Что делать, если у вас нет скаляров?
a{1} = 1;
a{2} = 'Doug';
a{3} = [1 2 3 4];
Тогда вы можете ссылаться на них как на { 1} или что-то еще.
Если у вас нет веской причины для этого, вам лучше создать массив ячеек, массив структур, вектор или что-то еще.
Мой ответ на этот вопрос: «Вы уверены, что действительно хотите это сделать?»
Но если ваш ответ ДА, то это ваш ответ:
for k=1:5
eval(['a' num2str(k) '= k;'])
end