我有一个 M 的单元格,有n个单元格,每个单元格包含几个唯一的数字,如下所示:
{[15 16 21 26 28 145],[2 5 8 9 15],[20 24 27],[10 11 15 8 6 258 74 1],...}
其中一些值出现在多个单元格中。我想计算这些单元格中重叠值的分数。例如,对于上面的4个单元,我有19个唯一的数字,其中2个属于多于1个单元:15和8.因此,重叠单元的分数是2/19 = .105。注意,M中的单元数可以变化,因此M中的唯一数的数量也变化。有没有人对如何有效地做这个有任何建议?我已经尝试horzcat
连接M中的单元格然后使用unique
但是没有得到我想要的结果。
答案 0 :(得分:0)
使用hist()函数的输出在这里很有用。
M = {[15 16 21 26 28 145],[2 5 8 9 15],[20 24 27],[10 11 15 8 6 258 74 1]};
% Bring data to one matrix.
M2 = cell2mat(M);
% Build a histogram from the data with a bin on each unique element. The
% first output of hist is the number of elements in each bin.
a = hist(M2,unique(M2));
% Calculate the overlap by dividing the number of elements that occur more
% than once by the total number of elements.
overlap = sum(a>1)/numel(a);