Matlab 查找仅包含1的列

Matlab 查找仅包含1的列,matlab,vector,matrix,Matlab,Vector,Matrix,我知道有命令 A(:, find(sum(abs(A)) == 1)) = [] 这将发现哪些列的总和等于1,然后删除它们。这不是我要找的,因为如果一行包含2和-1,它将删除该行。但我试图找到一个包含所有零和1的列,然后命令会将该1设置为零 任何帮助都将不胜感激 例: 一列零 [1 2 3 0 3 2 0 1 2] 我希望将第一列更改为一列零,请尝试以下操作: [1 2 3 0 3 2 0 1 2] sum(a)==1 &am

我知道有命令

    A(:, find(sum(abs(A)) == 1)) = []
这将发现哪些列的总和等于1,然后删除它们。这不是我要找的,因为如果一行包含2和-1,它将删除该行。但我试图找到一个包含所有零和1的列,然后命令会将该1设置为零

任何帮助都将不胜感激

例: 一列零

    [1 2 3
     0 3 2
     0 1 2]
我希望将第一列更改为一列零,请尝试以下操作:

    [1 2 3
     0 3 2
     0 1 2]
sum(a)==1 & sum(a==1) & ~sum(a>1) & ~sum(a<0)

sum(a)==1&sum(a==1)&~sum(a>1)&~sum(a1)&~sum(a您需要合并这两个条件:

idx = find ((sum(a==1)==1));
idx2 = find ((sum(abs(a)) == 1));
第一种方法是搜索只有一个数字“1”的列。
第二次搜索的列的绝对和仅为1,因此2,-1,-1,1!没有问题。

您就快到了。只需要分配
0
,而不是使用
[]

A(:, find(sum(abs(A)) == 1)) = 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

你的
abs
中没有处理负数问题吗?没有,这不起作用,因为我只希望列只包含一个1,其余的是0。这将返回任何一行,总和为1。你的命令至少对我来说很好。给我们看一个不起作用的示例!我同意@aganders3Ok我明白了你的意思是,但是如果行包含-1,那么它将删除它。我如何将1更改为0以使其成为全零的行?而不是删除row@user2942812零点的行?还是零的列?考虑给出例子,我自己工作了,谢谢。但是我怎么才能把那1个变成0'SA(和)(a)=1和和(a==1)。&~sum(AJust意识到第三个条件是不需要的。@francesco true。但适用于OP的数据。在这种情况下,接受的ans是健壮的。