在matlab中查找单元格数组中的值(数组)

时间:2013-10-07 15:31:57

标签: arrays matlab

我试图找到一种更有效的方法,在使用'for'循环之外,在cellarray中查找数组的索引。我的问题如下:

a = [6,3]
b = {[1,10];[1,8,10];[8,10];[2,8];2;[2,4,5];[2,4];[];[3,6];[3,4,6];6;[3,5,6];[6,9];[1,6,9];[1,6,7,9]}

我需要在'b'中找到'a'的索引。我当前的方法有效,但是当你增加'b'的大小时这是非常缓慢和麻烦的。我对数组的顺序不感兴趣,只是内容相同,这就是我使用'setxor'方法的原因。下面的代码显示了我目前如何执行此操作的示例。

for num = 1:size(b,1)       
    new_array(num,1) = isempty(setxor(a, b{num,1}));
    if (new_array(num,1) == 1)
       indexOfArray = num; 
       break; 
    end;
end;

有更好的方法吗? 提前致谢, 文森特

1 个答案:

答案 0 :(得分:5)

使用cellfun

很容易
find(cellfun(@(x) isempty(setxor(a,x)), b))

如果您只想要第一次巧合,请使用

find(cellfun(@(x) isempty(setxor(a,x)), b), 1)

根据setxor使用您的巧合定义。

感谢@Dan和@DennisJaheruddin的建设性意见,这些意见已纳入此答案。