3

我试图找到一种更有效的方法来查找单元数组中的数组索引,而不是使用“for”循环。我的问题如下:

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;

有没有更好的方法来做到这一点?提前致谢,文森特

4

1 回答 1

5

这很容易cellfun

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

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

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

这使用您对巧合的定义,以setxor.

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

于 2013-10-07T15:38:26.217 回答