2017-05-10 2 views
1

j'ai une cellule M avec un nombre n de cellules, chaque cellule contenant plusieurs numéros uniques, quelque chose comme ceci:Fraction des membres qui se chevauchent sur plusieurs vecteurs

{[15 16 21 26 28 145],[2 5 8 9 15],[20 24 27],[10 11 15 8 6 258 74 1],...} 

Certaines de ces valeurs apparaissent dans plus de 1 cellule Je voudrais calculer la fraction de chevauchement des valeurs à travers ces cellules. Par exemple, avec les 4 cellules ci-dessus, j'ai 19 nombres uniques, et 2 d'entre eux appartiennent à plus de 1 cellule: 15 et 8. Ainsi, la fraction de la cellule qui se chevauche est 2/19 = .105. Notez que le nombre de cellules dans M peut varier et ainsi le nombre de nombres uniques dans M varie également. Quelqu'un at-il des suggestions sur la façon de le faire efficacement? J'ai essayé horzcat pour concaténer les cellules dans M puis utilisé unique mais n'a pas tout à fait ce que je veux. L'utilisation de la sortie de la fonction hist() est utile dans ce cas.

Répondre

0

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); 
+0

Merci @Poelie! –