我有一个向量,让我说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]
。
答案 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