Как найти минимальное значение в каждой строке, сохраняя размеры массива одинаковыми, используя numpy? - PullRequest
1 голос
/ 14 марта 2019

Это должно быть просто, но я не могу понять, пожалуйста, помогите. У меня есть следующий массив.

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.07704314 0.         0.         0.        ]
 [0.         0.02914078 0.         0.        ]
 [0.32757561 0          0.         0.        ]
 [0.         0.         0.26657932 0.        ]]

Ответы [ 3 ]

1 голос
/ 14 марта 2019

Вы можете использовать np.where примерно так:

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

Или (больше строк, но потенциально более эффективно):

out = np.zeros_like(a)
idx = a.argmin(1)[:, None]
np.put_along_axis(out, idx, np.take_along_axis(a, idx, 1), 1)
0 голосов
/ 14 марта 2019

IIUC сначала выясняет значение min каждой строки, затем мы основываемся на маске минимального значения для всех минимальных значений в исходном массиве как True, используя multiple (матрица), в результате получаем то, что нам нужно

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.        ]])
0 голосов
/ 14 марта 2019

np.amin(a, axis=1) где a - ваш массив np

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...