尝试检查相同的向量。目前使用isequal
函数检查相同的函数。
它像这样运行。
if isequal (vectorA, vectorB) == 0
然后它会运行一条指令
end
if isequal (vectorA, vectorB) == 1
它会运行另一条指令
end
我现在有一组从A到F的向量。无论如何要检查所有这些(B,C,D,F)与Vector A并做同样的事情?
含义
if vectorA matches any of B,C,D,F == 0
与第二种情况相同
if vectorA matches any of B,C,D,F == 1
向量不断变化,这是在循环中运行以检查相同的向量。似乎isequal函数仅适用于2个向量之间
所有向量都是1xi
其中i can be a number up to 50
对此的任何帮助都会非常令人沮丧!
答案 0 :(得分:2)
我建议你将其他矢量保存在矩阵中,而不是像:
a = vectorA;
B = [vectorB, vectorC, vectorD, vectorE];
然后只使用一个简单的for循环:
flag = false;
for k = 1:size(B,2)
flag = flag || isequal(a,B(:,k));
if flag
break
end;
end
或者如果你喜欢在循环中使用一个完全复杂的单行(但在这种情况下,我怀疑循环中的早期退出子句实际上可能提供性能优势,但取决于你的数据):
flag = any(all(bsxfun(@eq,a,B)))
然后
if flag
%// do stuff if any was equal
else
%// Do stuff if none were equal to a
顺便说一句,如果你想检查一下 ALL 是否匹配,而不是 ANY 匹配,那么请改为:
flag = all(all(bsxfun(@eq,a,B)))
或在循环中更改为
flag = true;
for k = 1:size(B,2)
flag = flag && isequal(a,B(:,k));
if ~flag
break
end;
end
答案 1 :(得分:1)
这可以通过ismember轻松完成:
检查矢量是否与任何行匹配:
v = 1:3
M = [1:3;2:4;3:5]
ismember(v,M,'rows')
要检查它是否与所有行匹配,您可以通过检查以下内容来扩展它:
size(unique(M,'rows'),1)==1
这假设向量堆叠在彼此之下,但当然可以很容易地调整它们以匹配它们彼此相邻时的情况。
答案 2 :(得分:0)