如何找出一个向量只包含一个1而另一个是0?或者如何检查每个条目是否相同?

时间:2011-09-06 09:13:00

标签: matlab

如何找出一个向量是否仅包含一个1而另一个是否为0?或者如何检查每个条目是否相同?

e.g。我需要检查一个向量是否包含零,除了只有一个1,如:

(0 0 0 0 1 0 0 0 0) -> true
(0 0 0 0 0 0 0 0 1) -> true
(0 0 0 0 2 0 0 0 0) -> false
(0 0 1 0 1 0 0 0 0) -> false

4 个答案:

答案 0 :(得分:2)

您可以使用逻辑索引,假设您的向量为vnumel(v(v==1))返回向量中等于1的元素数。

同样,如果你想检查每个值是否相同,你可以使用:numel(unique(v)),它返回v的唯一条目数。

答案 1 :(得分:1)

略有不同的解决方案:

v = [0 0 0 0 1 0 0 0 0];
TF = sum(v==1)==1           %# returns TRUE

如果要将其应用于矩阵的所有行,这将非常有用:

M = [
    0 0 0 0 1 0 0 0 0 ;
    0 0 0 0 0 0 0 0 1 ;
    0 0 0 0 2 0 0 0 0 ;
    0 0 1 0 1 0 0 0 0 
];
TF = sum(M==1,2)==1

结果:

>> TF
TF =
     1
     1
     0
     0

答案 2 :(得分:0)

只需从变量中提取所有唯一元素即可实现对零的检查:

u = unique (v)

然后,您可以将结果与零进行比较,然后瞧。

答案 3 :(得分:0)

要检查非零元素,请使用find功能。如果它只找到一个索引且该条目为1,则所需结果为true。否则就是假的。

function bool = oneone(vector)
    num = find(vector);
    bool = isscalar(num) && vector(num)==1;
end

对于所有相同的条目,diff函数计算后续元素的差异。如果结果的any非零,则您所需的结果为false。

function bool = allsame(vector)
    d = diff(vector);
    bool = ~any(d);
end