2
votes

Recherche du nombre de doublons uniquement et uniquement à la fin d'un tableau numpy

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!


0 commentaires

3 Réponses :


0
votes

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


2 commentaires

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.



3
votes

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.


4 commentaires

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.



0
votes
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)

1 commentaires

Merci. Votre code renverra les résultats corrects, mais il devrait y avoir une rupture lorsque la boucle rencontre une non-duplication.