2013-11-07 5 views
0

Я пытаюсь создать цикл, в котором будет проверяться, не равна ли сумма столбца нулю. Если это так, я хочу сделать что-то ...добавить все значения в конкретный столбец matlab

for i:size(A,2) 
     if A(:,sum(A)==0) ~=0 
      %do something 
     end 
    end 

, но эта сумма возвращает все столбцы в матрице, а не через один, в то время

Есть предложения?

ответ

4

Замените ваш if с этим:

if sum(A(:,i))~=0 

, который берет на себя все элементы -м столбце i, складывает их и сравнивает их с 0. Если сумма не равна нулю, будет выполнена %do something.

Что делает ваш if заявление делает получение A(:,sum(A)==0). Теперь sum(A)==0 проверяет, равна ли сумма всех элементов A. Вероятно, это будет не так, и в этом случае он даст ложное значение (ноль), поэтому вы будете тестировать, будет ли A(:,0)~=0 работать не так, потому что Matlab начинает индексирование на 1. Если сумма матрицы равна 0, то будет истинно sum(A)==0 (это будет be 1), и вы получите A(:,1)~=0, который не будет работать, потому что он будет сравнивать вектор A(:,1) со скаляром, 0.

+0

+1 для объяснения, почему исходный код * не работает *. – nispio

0

Попробуйте это:

for i = 1:size(A,2) 
    if(sum(A(:,i)) ~= 0) 
     % do something 
    end 
end 
1

Вы можете достичь того же с этим тоже:

for i = find(sum(A) ~= 0) 
    % do something 
end 

Это итерацию для каждого столбца i, для которых сумма столбца не равна 0.

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