如何检查元素是否在嵌套元胞数组中?
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 更好的解决方案?
因为每个元素都是一个单元格,所以你别无选择,只能使用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
将它们转换为数值向量
如何检查元素是否在嵌套元胞数组中? 例如:
A = {{4 5 6};{6 7 8}};
b = 5;
函数
ismember(b,A{1})
不起作用。 有没有比 for-loop 更好的解决方案?
因为每个元素都是一个单元格,所以你别无选择,只能使用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
将它们转换为数值向量