在mATLAB中查找两个单元阵列的交集

时间:2014-10-21 09:58:50

标签: matlab

我有两个单元阵列C& D,它们包含数值数据(但有些单元格是空的)。每个单元格内的数据可能是一个二维数组,我想找到C中每个单元格与D中每个单元格的交集  我该怎么办呢?

例如:如果C&的大小D是10乘10 C = [{1 2},{3 4},......等] D = [{1 34 7},{2 5},......等等]

Out = c与D相交 out = [{1},{},.... etc]

2 个答案:

答案 0 :(得分:1)

>> C = {1 [2 3 4; 5 6 7] [] [] 5};
>> D = {1:2 3:5 6 7:9 []};
>> R = cellfun(@(c, d) intersect(c(:), d(:)), C, D, 'uniformoutput', 0);
>> R{:}
ans =
     1
ans =
     3
     4
     5
ans =
   Empty matrix: 1-by-0
ans =
   Empty matrix: 0-by-1
ans =
   Empty matrix: 1-by-0

答案 1 :(得分:0)

如果您的数据只是数字(每个单元格包含一个数值并清空),我建议您将其更改为数字数组并使用intersect函数。很容易将缺失值表示为NaN

要转换为double:

tmp = {1, 2, 3, 4, 5, []};
% // Getting rid of the empties 
index_empties = cellfun(@isempty, tmp);
tmp(index_empties) = {NaN};

% // converting to double
tmp_double = cellfun(@double, tmp);

单元格值可以轻松创建具有非同类数据类型的向量(例如,字符串和数字)。人们常常看到使用单元格来存储数字。虽然这在某些情况下可能有效,但使用单元存储同类数据会浪费内存并使某些操作复杂化。例如,您不能轻易地将两个单元格向量与数字数据相加,而将两个双向量相加则很简单。