2016-11-01 2 views
0

Я хотел бы создать переменные и называть переменные через индекс в цикле во имя переменнойLoop Строка в имени переменной Matlab

for k = 1 : 10 
    A_{k} = rand(10,1); 
end 

Я хочу, чтобы создать переменные

A_1 = [.43,.234.,....] 
A_2 
A_3 
... 

Но это не так. Он создает только переменную A.

Как подать индекс в цикл для создания отдельных переменных?

+0

Было бы посоветовал держать его в карте или что-то, а затем просто polute пространство имен. Но если вы действительно хотите, вы, кошка, смотрите на метод 'eval', чтобы делать то, что вы хотите. – Marcin

+0

Это не идеальный способ назвать ваши переменные. Было бы гораздо лучше собрать 'A' в массиве и получить доступ (для вектора столбца) 'A (:, 1)' вместо 'A_1',' A (:, 2) 'вместо' A_2' и т. д. Одним из преимуществ этого способа является то, что если вам когда-либо понадобится перебирать все переменные «A», вы можете просто перебрать индексы столбцов. – beaker

+2

[Именование динамических переменных плохо] (http://stackoverflow.com/questions/32467029/how-to-put-these-images-together/32467170#32467170). Как указал Васи Ахмад, вы на самом деле ищете массив. Пожалуйста, см. Мой ответ, который я связал, и все ссылки, содержащиеся в нем, о том, почему это плохая практика. – Adriaan

ответ

-2

Вы можете сделать переменные динамически, используя assignin следующим образом:

for k = 1:10 
    assignin('base', ['A_', num2str(k)], rand(10,1)) 
end 

whos 

    Name  Size   Bytes Class  Attributes 

    A_1  10x1    80 double    
    A_10  10x1    80 double    
    A_2  10x1    80 double    
    A_3  10x1    80 double    
    A_4  10x1    80 double    
    A_5  10x1    80 double    
    A_6  10x1    80 double    
    A_7  10x1    80 double    
    A_8  10x1    80 double    
    A_9  10x1    80 double    
    k   1x1     8 double 
+0

Могу я задать вам еще один вопрос? Я хочу запустить m-скрипт много раз, скажем, 100 раз. Каждый запуск, он генерирует вектор и сохраняет его, снова запускает сценарий, сохраняет его. Каков наилучший способ сделать это? – jessica

+0

@jessica Не стоит беспокоиться. Если это будет полезно, то прием будет воспринят. – Marcin

+0

@jessica Я ответил в другом вопросе о цикле – Marcin

1

Что вы пытаетесь сделать, так это создать массив, представляющий собой набор переменных.

A = zeros(10,1); % to initialize array 
for k = 1 : 10 
    A(k) = rand(10,1); 
end 

В настоящее время A представляет собой массив размером 10 и содержит 10 случайных значений.

+0

Извините, я хочу, чтобы имя переменной включало индексный номер – jessica

+0

A_1, A_2, A_3 ... и т. Д. Не A (1) A (2) A (3) – jessica

+0

доступ к данным с использованием A (1), A (2), ....., A (10). почему вы хотите создать 10 переменных, это не имеет смысла. –

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