在行轴中找到矩阵的最大值并将其他值替换为零
Find the maximum values of a matrix in rows axis and replace other values to zero
A = [[2,2,4,2,2,2]
[2,6,2,2,2,2]
[2,2,2,2,8,2]]
我希望矩阵 B 等于:
B = [[0,0,4,0,0,0]
[0,6,0,0,0,0]
[0,0,0,0,8,0]]
所以我想找到每一行的最大值并将其他值替换为0。有没有不使用for循环的方法来做到这一点?
预先感谢您的意见。
您可以直接取每一行的最大值,然后屏蔽较低的元素并将其替换为零,而不是查看 argmax:
Inplace 这看起来像(这里 True
代表 keepdims=True
):
>>> A[A < A.max(1, True)] = 0
>>> A
array([[0, 0, 4, 0, 0, 0],
[0, 6, 0, 0, 0, 0],
[0, 0, 0, 0, 8, 0]])
一个不合适的替代方法是使用 np.where
:
>>> np.where(A == A.max(1, True), A, 0)
array([[0, 0, 4, 0, 0, 0],
[0, 6, 0, 0, 0, 0],
[0, 0, 0, 0, 8, 0]])
A = [[2,2,4,2,2,2]
[2,6,2,2,2,2]
[2,2,2,2,8,2]]
我希望矩阵 B 等于:
B = [[0,0,4,0,0,0]
[0,6,0,0,0,0]
[0,0,0,0,8,0]]
所以我想找到每一行的最大值并将其他值替换为0。有没有不使用for循环的方法来做到这一点? 预先感谢您的意见。
您可以直接取每一行的最大值,然后屏蔽较低的元素并将其替换为零,而不是查看 argmax:
Inplace 这看起来像(这里 True
代表 keepdims=True
):
>>> A[A < A.max(1, True)] = 0
>>> A
array([[0, 0, 4, 0, 0, 0],
[0, 6, 0, 0, 0, 0],
[0, 0, 0, 0, 8, 0]])
一个不合适的替代方法是使用 np.where
:
>>> np.where(A == A.max(1, True), A, 0)
array([[0, 0, 4, 0, 0, 0],
[0, 6, 0, 0, 0, 0],
[0, 0, 0, 0, 8, 0]])