【问题标题】:Columnwise setting all values that meet a condition to zero按列将满足条件的所有值设置为零
【发布时间】:2020-02-22 19:57:11
【问题描述】:

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


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

我怎样才能使最后一部分更有效(对于数组或数据帧)?

【问题讨论】:

  • 这是M1[1,...],还是M1[row,...]
  • @WillemVanOnsem 嘿,我不确定我是否明白你的意思。你能详细说明一下吗?

标签: numpy dataframe conditional-statements setvalue


【解决方案1】:

试试:

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

输出:

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

【讨论】:

    【解决方案2】:

    您可以在此处使用掩码,您可以通过以下方式构建:

    M < M1[1,:]
    

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

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

    【讨论】:

    • 谢谢你,@Willem Van Onsem。这就是我一直在寻找的东西。我只是不知道如何屏蔽“按列”。但这似乎相当简单。
    猜你喜欢
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多