我知道有命令
A(:, find(sum(abs(A)) == 1)) = []
这将找到总结的列等于1,然后删除它们。这不是我要找的,因为如果一行包含2和-1,它将删除该行。但我试图找到一个包含全零和1的列然后命令将该值设置为零。
非常感谢任何帮助。
EX: 一列零
[1 2 3
0 3 2
0 1 2]
我想将第一列更改为零列
答案 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