Matlab:如何知道向量V是否属于集合S?

时间:2014-12-21 12:06:17

标签: matlab vector

如何知道向量V是否属于集合S

V=[3 7 5]

S={[1 3],[4 9 7 22 4 5],[2 66 4],[8 66 44 12 5 71],[100 45 88 7 1 5 9 73]}

3 个答案:

答案 0 :(得分:3)

您可以使用cellfun

 A = cellfun( @(x) isequal(x,V), S );

A = cellfun(@isequal,S,repmat({V},size(S)));

会给,

A =
 0     0     0     0     0

sum(A) > 0将给出最终结果。

答案 1 :(得分:2)

问题案例#1:假设您要查找S中的每个单元格是否至少有一个元素也存在于V中,您可以使用此基于 arrayfun 的方法 -

out = arrayfun(@(n) any(ismember(S{n},V)),1:numel(S))

对于给定的输入,你会得到 -

>> out
out =
     1     1     0     1     1

或基于 cellfun 的方法(虽然我会以arrayfun为基础的方法来提高我的资金以获得更好的效果) -

out = cellfun(@(x) any(ismember(x,V)),S)

问题案例#2:如果您要查找VS的每个单元格之间的完全匹配,则可以再次使用arrayfun -

out = arrayfun(@(n) isequal(V,S{n}),1:numel(S))

答案 2 :(得分:1)

您需要检查集合中的每个向量,并检查它是否与向量V相同:

for i=1:length(S)
    if (isequal(S{i},V))
        % V is in S
    end;
end;

请注意,您使用大括号S处理{}以获取单元格的值,而不是单元格本身。