找到一个单元格数组的交集

时间:2014-10-12 16:10:30

标签: matlab cell-array

我有一个向量,让我说as = [1 3 4]我有30 by 30个单元格数组。我想检查vector的元素是否与每个单元格的元素相交?单元格可以是2D大小为n-by-2的数组(其中n = 1 2 3 4等)。

如果单元格中的行与该向量有交集,则应返回(1 or 0)&如果该行与该向量没有交集,则应返回(0 or 1)

实施例: 如果单元格数组中包含[ 1 8 ;6 9],则输出为[1; 0]

2 个答案:

答案 0 :(得分:1)

假设cellarr是输入单元格数组,请查看此方法是否适用于您 -

out = cellfun(@(x) any(any(bsxfun(@eq,x,permute(as,[1 3 2])),2),3),cellarr,'un', 0)

这将为您提供每个单元格的所有匹配的单元格数组。您可以通过调用celldisp(out)来查看其值。

示例运行 -

as =
     1     3     4
-----------------------------------
cellarr{1,1} =
     1     8
     6     9
cellarr{2,1} =
     7     4
     2     3
cellarr{1,2} =
     4     3
cellarr{2,2} =
     7     8
     2     3
     7     8
-----------------------------------
out{1,1} =
     1
     0
out{2,1} =
     1
     1
out{1,2} =
     1
out{2,2} =
     0
     1
     0

编辑:如果您希望找到与out中的单元格值不对应的任何零的索引,那么我们打算查找所有行至少包含的单元格来自as的一个元素,您可以使用此修改后的代码,假设ca为输入单元格数组(此处更改名称以保持代码紧凑) -

mch = cellfun(@(x) all(any(any(bsxfun(@eq,x,permute(as,[1 3 2])),2),3)),ca,'un',0)
                                                   %// Find matches for all cells
mch(cellfun('isempty',ca))={false} %// take care of empty cell condition
[row_ind,col_ind] = find(cell2mat(mch)) %// row and column indices of good matches

答案 1 :(得分:0)

这个怎么样?

矩阵 - 使用高斯算法计算向量子空间的交集 - 数学堆栈交换http://goo.gl/PXCPlH