按列将满足条件的所有值设置为零
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
我有一个如下所示的数组:
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