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