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

How can I check whether an element is in a nested cell array?

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

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

函数

ismember(b,A{1})

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

因为每个元素都是一个单元格,所以你别无选择,只能使用cellfunismember结合使用,这在任何情况下都与使用循环相同。你的细胞特别深两层(根据 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 将它们转换为数值向量