如何找出一个向量是否仅包含一个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
答案 0 :(得分:2)
您可以使用逻辑索引,假设您的向量为v
:numel(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