0

我正在尝试创建一个循环,它将检查列总和是否不等于零。如果是的话,我想做点什么……

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

但该总和返回矩阵中的所有列,而不是一次通过一个

有什么建议么?

4

3 回答 3

4

用这个替换你if的:

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

它采用i第 -th 列的所有元素,将它们相加并将它们与0. 如果总和不为零,%do something则将被执行。

你的if声明正在做的是得到A(:,sum(A)==0)。现在sum(A)==0检查所有元素的总和是否A为零。可能不会,在这种情况下它会给出一个假(零),所以你将测试A(:,0)~=0哪个不起作用,因为 Matlab 从 1 开始索引。如果矩阵总和为 0,则为sum(A)==0真(它将为 1 ) 并且您将得到A(:,1)~=0哪个不起作用,因为它将向量A(:,1)与标量进行比较,0.

于 2013-11-07T03:06:34.673 回答
1

你也可以用这个实现同样的目标:

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

i这将对列总和不等于 0的每一列进行迭代。

于 2013-11-07T03:16:46.223 回答
0

尝试这个:

for i = 1:size(A,2)
    if(sum(A(:,i)) ~= 0)
        % do something
    end
end
于 2013-11-07T03:11:06.220 回答