如何检查元素是否在嵌套单元格数组中?

时间:2015-05-04 17:20:50

标签: arrays matlab cell-array

如何检查元素是否在嵌套单元格数组中? 例如:

A = {{4 5 6};{6 7 8}};
b = 5;

功能

ismember(b,A{1})

不起作用。 有没有比for-loop更好的解决方案?

1 个答案:

答案 0 :(得分:4)

由于每个元素都是一个单元格,因此您无法选择使用cellfun并结合ismember,这与在任何情况下使用循环相同。你的细胞特别是两个深(每个Andrew Janke)。单元格数组中的每个单元格元素都是单个元素的另一个单元格数组,因此没有可以帮助您解决此问题的矢量化解决方案。

假设每个单元格只是单个元素的一维单元格数组,那么您可以这样做:

A = {{4 5 6};{6 7 8}};
b = 5;
out = cellfun(@(x) ismember(b, cell2mat(x)), A);

这给了我们:

out =

     1
     0

这将检查每个嵌套单元格数组中的值b是否存在。如果您打算在整个嵌套单元格数组中检查它是否存在,请在输出中使用any,这样:

out = any(cellfun(@(x) ismember(b, cell2mat(x)), A));

因为每个单元格元素都是单个元素的单元格数组,所以我在调用ismember之前将这些元素转换为cell2mat的数字向量。