如何将每行中的最大值和所有其他数字保留为0



我想保留每行中的最大值,并将所有其他值更改为零,像这个

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 9, 8])
should be 
[0,0,0,0,0,0,0,0,9,0]

到目前为止,我已经能够将最大值变成1,并将所有其他值变成零。

a = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 9, 8]])
b = np.zeros_like(a)
b[np.arange(len(a)), a.argmax(1)] = 1
b

如何保留原始价值?我想把b乘以a,也许可以解决这个问题。但肯定有一个更简单的方法。

创建一个只有零的新数组,将index替换为max和max值:

a = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 9, 8]])
a_empty = np.zeros_like(a)
a_empty[0][a.argmax(1)] = max(a[0])

退货:

array([[0, 0, 0, 0, 0, 0, 0, 0, 9, 0]])

注意

您可以将numpy.where用于此任务

import numpy as np
a = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 9, 8]])
b = np.where(a==np.max(a), a, 0)
print(b)

输出

[[0 0 0 0 0 0 0 0 9 0]]

说明:这确实创建了与a具有相同形状的numpy.array,以及来自满足条件的a和所有其他位置的0的相应值。

试试这个:

b = np.zeros_like(a)
b[np.where(a==np.max(a))] = np.max(a)

看看你所尝试的,我猜你已经错误地初始化了初始数组a,然后将argmax((用作2-D数组,如果数组a初始化错误,就像我假设的那样,那么你的代码应该是这样的:

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 9, 8])
b = np.zeros_like(a)
b[np.argmax(a)] = np.max(a)

相关内容

最新更新