J'ai une matrice listScore avec la forme (100000,2): je voudrais compter toutes les lignes identiques comme. Par exemple, si listScore était une liste de liste, je ferais simplement:

listScore.count([2,0])

Chercher toute la liste égale à [2,0]. Je pourrais évidemment transformer le type de mon listScore pour que ce soit une liste mais je veux garder l'efficacité de numpy. Y a-t-il une fonction que je pourrais utiliser pour faire la même chose?

Merci d'avance

5
Dirty_Fox 22 juil. 2015 à 13:43

2 réponses

Meilleure réponse

Si listScore est un tableau NumPy, vous pouvez faire -

count = np.all(listScore == np.array([2,0]),axis=1).sum()

Si le tableau est toujours un tableau à 2 colonnes, vous pouvez comparer les deux colonnes séparément avec 2 et 0 respectivement pour les performances et obtenir le nombre comme ceci -

count = ((listScore[:,0] ==2) & (listScore[:,1] ==0)).sum()

Si vous êtes fan de np.einsum, vous voudrez peut-être essayer celui-ci tordu -

count = (~np.einsum('ij->i',listScore != [2,0])).sum()

Une autre solution orientée performances pourrait être avec cdist from scipy -

from scipy.spatial.distance import cdist
count = (cdist(listScore,np.atleast_2d([2,0]))==0).sum()
4
Divakar 22 juil. 2015 à 11:32

Pour un numpy.matrix, vous pouvez utiliser:

(listScore==listScore[ind]).all(1).sum()

Pour trouver le nombre de lignes correspondant à la ligne d'index ind.

Ou

(listScore==[2,0]).all(1).sum()

Pour correspondre à un modèle spécifique

0
tmdavison 22 juil. 2015 à 11:09