如何检查元素是否在嵌套单元格数组中? 例如:
A = {{4 5 6};{6 7 8}};
b = 5;
功能
ismember(b,A{1})
不起作用。 有没有比for-loop更好的解决方案?
答案 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
的数字向量。