Matlab 如何确定一个向量是否只包含一个1而另一个为0?或者如何检查每个条目是否相同?
如何确定一个向量是否只包含一个1而另一个为0?或者如何检查每个条目是否相同 e、 g.我需要检查向量是否包含除1以外的0,如:Matlab 如何确定一个向量是否只包含一个1而另一个为0?或者如何检查每个条目是否相同?,matlab,Matlab,如何确定一个向量是否只包含一个1而另一个为0?或者如何检查每个条目是否相同 e、 g.我需要检查向量是否包含除1以外的0,如: (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 可以使用逻辑索引,假设向量是v:numel(v(v==1))返回向量中等于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
可以使用逻辑索引,假设向量是
v
:numel(v(v==1))
返回向量中等于1的元素数
同样,如果要检查每个值是否相同,可以使用:
numel(unique(v))
,它返回v
的唯一条目数,这是一个稍微不同的解决方案:
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
通过从变量中提取所有唯一元素,可以实现仅检查零:
u = unique (v)
然后,您可以将结果与零进行比较,瞧。要检查非零元素,请使用
find
功能。如果它只找到一个索引,并且该条目是一个,那么您想要的结果就是真的。否则就是假的
function bool = oneone(vector)
num = find(vector);
bool = isscalar(num) && vector(num)==1;
end
对于所有相同的条目,
diff
函数计算后续元素的差异。如果任何
结果为非零,则所需结果为假
function bool = allsame(vector)
d = diff(vector);
bool = ~any(d);
end
最准确地说,应该是(numel(v(v==1))==1)来获取T/F。使用numel(unique(v))检查每个条目是否相同可能有点慢,因为unique进行排序。我认为~any(v~=v(1))应该快得多,特别是当v有许多元素时。那么
22122
或00102
呢?他们会是真的,对吗?我认为解决方案还应该检查唯一值。虽然它可能不在问题的范围之内。您是正确的,我们还应该检查我们只处理0和1(除了前面的测试):all(v==0 | v==1)
或all(M==0 | M==1,2)