按列将满足条件的所有值设置为零

Columnwise setting all values that meet a condition to zero

我有一个如下所示的数组:


    M=np.array([[1,2,3],[4,9,2],[3,5,6],[8,1,3]])

> M = [[1,2,3],
>      [4,9,2],
>      [3,5,6],
>      [8,1,3]]

对于每一列,我想将两个最小值设置为零。

因此我按降序排列(我知道升序会更快)


    M1 = np.sort(M, axis=0)[::-1]

然后我想使用类似

的东西

    for column in range(M.shape[1]):
        for row in range(M.shape[0]):
            if M[row, column] < M1[1,column]:        
                M[row, column] = 0

并收到:

> M = [[0,0,0],
>      [4,9,0],
>      [0,5,6],
>      [8,0,3]]

如何使最后一部分更有效(对于数组或 DataFrame)?

尝试:

M[M< M1[1,:]]=0

输出:

[[0 0 3]
 [4 9 0]
 [0 5 6]
 [8 0 3]]

您可以在此处使用您构造的掩码:

M < M1[1,:]

因此,我们可以将满足此条件的元素设置为 0

M[M < M1[1,:]] = 0