如何在使用numpy保持数组尺寸不变的同时找到每一行的最小值?

时间:2019-03-14 15:56:10

标签: python numpy

这应该很简单,但是我无法弄清楚,请帮忙。我有以下数组。

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 个答案:

答案 0 :(得分:1)

您可以像这样使用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)

答案 1 :(得分:0)

np.amin(a, axis=1),其中a是您的np数组

答案 2 :(得分:0)

IIUC首先找出每一行的min值,然后我们使用multiple(matrix)在最小值数组中将原始数组中的所有最小值设为True,以得到所需的值。结果

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.        ]])