2 votes

Trouver des occurrences de valeurs distinctes dans un tableau de cellules dans Matlab

J'ai un fichier de données composé de deux colonnes ('date' et 'utilisateur') :

date1 user1
date1 user1
date1 user2
date2 user1
date2 user2
...

J'ai besoin de savoir combien de fois chaque utilisateur a fait l'action au certain date . Je sais que je pourrais utiliser la fonction unique() pour trouver tous les utilisateurs distincts et après exécuter la boucle for à travers toutes les lignes, vérifier si elles sont égales et ensuite faire la somme, mais le problème est que j'ai plus de 8mln lignes et que l'exécution de la double boucle serait trop coûteuse.

Existe-t-il un autre moyen de compter les occurrences de la date pour chaque utilisateur ?

2voto

yuk Points 13497

Veuillez toujours indiquer quels sont les types de données que vous traitez, de préférence avec un exemple .

Je suppose que les utilisateurs et les dates sont des chaînes combinées dans un tableau de cellules.

tbl = { 'date1' 'user1'
        'date1' 'user1'
        'date1' 'user2'
        'date2' 'user1'
        'date2' 'user2' };

Combiner deux colonnes en une seule :

user_date = strcat(tbl(:,2),'@',tbl(:,1));

Vous pouvez alors compter les occurrences :

[gi,g] = grp2idx(user_date);
n = histc(gi,1:numel(g));

g = 

'user1@date1'
'user2@date1'
'user1@date2'
'user2@date2'

n =

     2
     1
     1
     1

Note La boîte à outils MATLAB Statistics Toolbox est nécessaire pour grp2idx

0voto

Franck Dernoncourt Points 4769

Si je comprends bien la question, regardez le code suivant :

% Your data
A = [1 9; 8 5; 5 9; 8 5; 9 9];
date = 8;
user = 5;

% Find how many times each unique user did the action at the certain date
nb_occurences = size(A, 1) - size((setdiff(A, [date user], 'rows')), 1);

Cache size(A, 1) est nécessaire (pas sûr que MATLAB le fasse pour vous).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X