1
votes

Comment trouver la valeur minimale dans chaque ligne tout en conservant les mêmes dimensions du tableau en utilisant numpy?

J'ai le tableau suivant:

[[0.07704314 0.         0.         0.        ]
 [0.         0.02914078 0.         0.        ]
 [0.32757561 0          0.         0.        ]
 [0.         0.         0.26657932 0.        ]]

Je veux trouver la valeur minimale dans chaque ligne du tableau. Comment puis-je y parvenir?

Réponse attendue:

np.array([[0.07704314, 0.46752589, 0.39533099, 0.35752864],
          [0.45813299, 0.02914078, 0.65307364, 0.58732429],
          [0.32757561, 0.32946822, 0.59821108, 0.45585825],
          [0.49054429, 0.68553148, 0.26657932, 0.38495586]])


0 commentaires

3 Réponses :


0
votes

np.amin (a, axis = 1) où a est votre tableau np


2 commentaires

Je souhaite conserver les dimensions et les indices. Je veux remplir 0 où les valeurs ne sont pas minimales. Votre solution donne un tableau à dimension unique de valeurs minimales.


Oui, tu as raison. Pour une raison quelconque, je n'ai pas lu la partie réponse attendue. Pardon.



0
votes

IIUC trouve d'abord la valeur min de chaque ligne, puis nous basons sur la valeur min masque toute la valeur min dans le tableau d'origine comme True, en utilisant multiple (matrice ), obtenez ce dont nous avons besoin comme résultat

np.multiply(a,a==np.min(a,1)[:,None])
Out[225]: 
array([[0.07704314, 0.        , 0.        , 0.        ],
       [0.        , 0.02914078, 0.        , 0.        ],
       [0.32757561, 0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.26657932, 0.        ]])


1 commentaires

Vous pouvez utiliser le kwarg keepdims = True ici.



1
votes

Vous pouvez utiliser np.where comme ceci:

out = np.zeros_like(a)
idx = a.argmin(1)[:, None]
np.put_along_axis(out, idx, np.take_along_axis(a, idx, 1), 1)

Ou (plus de lignes mais potentiellement plus efficace):

np.where(a.argmin(1)[:,None]==np.arange(a.shape[1]), a, 0)


0 commentaires