查找仅包含1个Matlab的列

时间:2013-10-31 19:26:24

标签: matlab vector matrix

我知道有命令

    A(:, find(sum(abs(A)) == 1)) = []

这将找到总结的列等于1,然后删除它们。这不是我要找的,因为如果一行包含2和-1,它将删除该行。但我试图找到一个包含全零和1的列然后命令将该值设置为零。

非常感谢任何帮助。

EX: 一列零

    [1 2 3
     0 3 2
     0 1 2]

我想将第一列更改为零列

4 个答案:

答案 0 :(得分:1)

试试这个:

sum(a)==1 & sum(a==1) & ~sum(a>1) & ~sum(a<0)

当列总和为1时,第一个陈述将为真 当至少有1个时,第二个是真的 当没有大于1的数字时,第三个将是真的 当没有小于0的数字时,第四个将成立

因此,只有1和0加起来

最终结果将是1s和0s的向量(1 == true,0 = false)

要将列中的单个1更改为0,请执行以下操作:

a(:,sum(a)==1 & sum(a==1) & ~sum(a>1) & ~sum(a<0))=0

答案 1 :(得分:0)

您需要合并这两个条件:

idx = find ((sum(a==1)==1));
idx2 = find ((sum(abs(a)) == 1));

第一个搜索列中只有一个数字“1”。 第二次搜索绝对总和只有1的列,所以没有问题2,-1,-1,1!

答案 2 :(得分:0)

你快到了。只需指定0而不是使用[]

删除
A(:, find(sum(abs(A)) == 1)) = 0

答案 3 :(得分:0)

更简单的表达方式是:

A(:, sum(A==1)==1 & sum(abs(A))==1) = 0;

说明:

A==1           - returns a boolean array with 1's where A==1, 0's everywhere else
sum(A==1)      - sums over the first dimension of the boolean array: will ==1 where there is exactly one 1
sum(abs(A))    - when there is exactly one 1, this sum will ==1 only if the rest are zero