2013-06-17 4 views
-2

Говорят, что у меня есть пустой массив следующим образом:Добавление элементов в массив

s=[]; 

Говорят, что, например, у нас есть следующий цикл:

for j=1:2 
    for i=1:10 
     if a(i,j)>0 
     ... 
     end 
    end 
end 

Вместо ..., я хочу добавить элементов до s. Как вы это делаете в MatLab?

ответ

1

Отслеживайте другой индекс и просто добавить элементы, как вы идете по:

idx = 1 
for j=1:2 
    for i=1:10 
     if a(i,j)>0 
      s(idx) = a(i,j) 
      idx = idx + 1 
     end 
    end 
end 

Хотя для вашей конкретной проблемы, вы можете просто написать

a(a>0) 
+1

Там нет необходимости держать еще один индекс. Вместо этого вы можете использовать 's (end + 1)'. – KronoS

+0

@KronoS это правильно, но в некоторых случаях вы хотите использовать этот индекс в выражении. Например, 's (idx) = a (i, j) + idx'. – SheetJS

+0

Я предполагаю, что это личное предпочтение, но вы можете с ним справиться, используя это: 's (end + 1) = a (ii, jj) + size (s, 2);' предполагается, что это массив строк, а не столбец , – KronoS

6

Я бы порекомендовал вам избежать петель в целом. Они медленны в MATLAB.

Предположим, вы хотите установить все значения в S(i,j) в 1, которые соответствуют A(i,j) > 0. Вы можете сделать:

S = zeros(size(A)); % always a good idea to initialize your array 
S(A > 0) = 1;   % and done. 

Более лаконично:

S = A > 0; 

Это указывает, что вы меняете значения S 1, соответствующие этим значениям A где A > 0.

Если вы хотите установить значение S к соответствующему значению A, то вы бы просто использовать:

S = A(A > 0); 
+1

+1 для показа, как это сделать без цикла. – Schorsch

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