Comment retenir N éléments les plus petits dans une ligne donnée du tableau numpy?

Sa Ashwin Geet D ':

Etant donné une matrice de numpy 2-D, comment conserver les N plus petits éléments de chaque rangée et le changement reste d'entre eux à 0(zéro).

Par exemple: N=3tableau d' entrée:

1   2   3   4   5
4   3   6   1   0
6   5   3   1   2

Production attendue:

1   2   3   0   0
0   3   0   1   0
0   0   3   1   2

Voici le code que je l'ai essayé et il fonctionne:

# distance_matrix is the given 2D array
N=3
for i in range(distance_matrix.shape[0]):
    n_th_largest = np.sort(distance_matrix[i])[N]
    for j in range(distance_matrix.shape[1]):
        distance_matrix[i][j] = np.where(distance_matrix[i][j]<n_th_largest,distance_matrix[i][j],0)

# return distance_matrix

Toutefois, cette opération implique itérer sur chaque élément. Y at - il un moyen plus rapide de résoudre ce en utilisant np.argsort()ou toute autre fonction?

Divkr:

Approche # 1

Voici un avec l' np.argpartitionefficacité de la performance -

N = 3
newval = 0
np.put_along_axis(a,np.argpartition(a,N,axis=1)[:,N:],newval,axis=1)

Explication: Nous partitionner le tableau d'entrée pour obtenir des indices qui sont cloisonnés-partout pour l' kthargument np.argpartition. Donc, considérez cela comme essentiellement deux partitions, avec un premier pour les éléments de N plus petites le long de cet axe et l'autre pour le reste. Nous avons besoin de réinitialiser la deuxième partition, que nous sélectionnons avec [:,N:]et nous utilisons np.put_along_axispour faire la remise à zéro.

run échantillon -

In [144]: a # input array
Out[144]: 
array([[1, 2, 3, 4, 5],
       [4, 3, 6, 1, 0],
       [6, 5, 3, 1, 2]])

In [145]: np.put_along_axis(a,np.argpartition(a,3,axis=1)[:,3:],0,axis=1)

In [146]: a
Out[146]: 
array([[1, 2, 3, 0, 0],
       [0, 3, 0, 1, 0],
       [0, 0, 3, 1, 2]])

Approche # 2

Voici une autre fois avec np.argpartition, mais couper juste le plus petit élément Nième par ligne, puis remettre à zéro tous supérieurs à lui. Ainsi, s'il y a des doublons pour le Nième élément le plus petit, nous gardons tous ceux avec cette méthode. Voici la mise en œuvre -

a[a>=a[np.arange(len(a)), np.argpartition(a,3,axis=1)[:,3],None]] = 0

Timings sur une version plus grande échelle -

In [184]: a = np.array([[1,2,3,4,5],[4,3,6,1,0],[6,5,3,1,2]])

In [185]: a = np.repeat(a,10000,axis=0)

In [186]: %timeit np.put_along_axis(a,np.argpartition(a,3,axis=1)[:,3:],0,axis=1)
1.78 ms ± 5.89 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [187]: a = np.array([[1,2,3,4,5],[4,3,6,1,0],[6,5,3,1,2]])

In [188]: a = np.repeat(a,10000,axis=0)

In [189]: %timeit a[a>=a[np.arange(len(a)), np.argpartition(a,3,axis=1)[:,3],None]] = 0
1.54 ms ± 54.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

comment trouver l'un des k plus petits éléments dans nk comparaisons étant donné que Array n'est pas trié et n est la taille du tableau

Comment prendre n éléments du tableau numpy et les ajouter à une liste séparée?

Conservez les éléments les plus grands et les plus petits dans chaque ligne d'une matrice dans Matlab

Comment imprimer tous les éléments du tableau String dans Kotlin sur une seule ligne?

Comment obtenir les index de colonne et de ligne dans une matrice à 2 dimensions (liste) contenant les éléments les plus donnés en utilisant numpy en python

Comment obtenir les n lignes les plus proches pour une ligne spécifique dans le tableau ?

Remplacement des éléments du tableau numpy dans une plage donnée, puis et là

remplacer les éléments du tableau par les éléments d'une liste dans NumPy

Moyen rapide de compter les éléments plus petits / égaux / plus grands dans un tableau

Comment trouver les plus petits nombres dans un tableau

Comment remplacer uniquement les n premiers éléments d'un tableau numpy qui sont plus grands qu'une certaine valeur?

Comment trouver l'index du plus petit nombre dans un tableau en python si j'ai plusieurs plus petits nombres et que je veux les deux index?

énorme matrice triée puis trouver les plus petits éléments avec leurs indices dans une liste

Un moyen rapide de trouver les N éléments les plus grands dans un tableau numpy

Un moyen rapide de trouver les N éléments les plus grands dans un tableau numpy

Comment conserver les éléments avec une étiquette de nom donnée dans un tableau?

Comment sommer rapidement les éléments d'une plage donnée dans un tableau?

Comment mettre chaque élément du tableau dans une ligne de tableau - données de table?

Comment imprimer tous les éléments du tableau sur une seule ligne?

Xpath : Comment identifier une ligne dans un tableau via ses éléments dans les colonnes ?

Comment supprimer une ligne d'éléments avec condition dans un tableau numpy 3 D?

index de N éléments les plus élevés d'une liste de tableau numpy

Les n premiers éléments de la ligne dans le tableau numpy

Comment aligner les colonnes pour centrer sur des écrans plus petits à l'aide du bloc en ligne (réactif)

Comment trouver les plus petits éléments de plusieurs listes dans R ?

Trouvez l'élément dans un tableau, dans lequel les éléments de gauche sont plus petits et les éléments de droite sont plus grands?

Comment vérifier les éléments d'une ligne dans un tableau 2D

Comment obtenir une liste de tous les éléments uniques par ligne dans un tableau?

Google Sheets - Trouvez les valeurs les plus basses dans l'ensemble du tableau ligne par ligne

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive