Je sais comment puis-je trouver le nombre de doublons à partir d'un tableau numpy. Cependant, je dois trouver le nombre de doublons uniquement à la fin du tableau numpy . Veuillez voir mon exemple ci-dessous:
Voici un exemple d'entrée:
3
Sortie désirée:
1995 1996 1996 1997 1998 1999 1999 1999
Merci d'avance!
3 Réponses :
Ma solution est la suivante, cependant, je suis sûr qu'il existe une solution plus élégante dans une ligne!
def get_numlastdups(my_nparray): numlastdups=0 for i in range(2,len(my_nparray)): if my_nparray[-1]==my_nparray[-i]: numlastdups+=1 else: break return numlastdups
Cela ne fonctionnera pas - puisque vous ne rompez pas la boucle en frappant un non-doublon, toutes les valeurs égales à la dernière (pas seulement celles d'une séquence) seront comptées.
@Blotosmetek En fait, cela fonctionnera car je ne considère que le dernier élément de la section if, mais vous avez un point sur la rupture. J'ai ajouté une pause.
Voici un moyen avec np.minimum.accumulate
-
In [88]: (a[::-1]==a[-1]).argmin() Out[88]: 5
Exemple d'exécution -
In [64]: a Out[64]: array([2, 1, 9, 0, 0, 0, 2, 1, 0, 0, 0, 0, 2, 1, 0, 9, 9, 9, 9, 9]) In [73]: np.minimum.accumulate(a[::-1]==a[-1]).sum() Out[73]: 5
Un autre avec argmin
-
np.minimum.accumulate(a[::-1]==a[-1]).sum()
Pour un cas d'angle, si tous les éléments sont identiques, nous pourrions avoir besoin d'une étape supplémentaire pour vérifier all
correspondances sur a[::-1]==a[-1]
et retourner len(a)
dans ce cas. Ou si le nombre est 0
, ce qui ne peut pas être la sortie, nous afficherons len(a)
place.
Hé, pourquoi ne pas simplement additionner comme np.sum (data == data [-1]), un avantage spécifique de np.minimum.accumulate?
@PavanKumarPolavarapu Parce que nous voulons sauter les éléments intermédiaires qui correspondent au dernier élément si j'ai bien compris l'intention d'OP only at the end of the numpy array
.
Euh, ça a du sens :)
@PavanKumarPolavarapu merci beaucoup pour votre attention. seulement à la fin du tableau numpy était la clé pour cette question.
mylist = [1995, 1996, 1996, 1997, 1998, 1999, 1999, 1999] s = 0 x = mylist[-1] for i in mylist: if i == x: s+= 1 print(s)
Merci. Votre code renverra les résultats corrects, mais il devrait y avoir une rupture lorsque la boucle rencontre une non-duplication.