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

2024-09-25 00:22:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望保留每行的最大值,并将所有其他值更改为零, 像这样

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,这可能会解决这个问题。但肯定有更简单的方法


Tags: 方法lennpzerosbearraylikeshould
3条回答

试试这个:

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

看看您所做的尝试,我猜您已经错误地初始化了初始数组a,然后将argmax()用作二维数组,如果数组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)

创建一个只包含零的新数组,将索引替换为max,并使用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创建相应的值

相关问题 更多 >