gpt4 book ai didi

python - Numpy:将每行中的最大值更改为 1,所有其他数字更改为 0

转载 作者:IT老高 更新时间:2023-10-28 20:54:18 26 4
gpt4 key购买 nike

我正在尝试实现一个 numpy 函数,它将 2D 数组的每一行中的最大值替换为 1,并将所有其他数字替换为零:

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

到目前为止我所做的尝试

def some_function(x):
a = np.zeros(x.shape)
a[:,np.argmax(x, axis=1)] = 1
return a

>>> b = some_function(a)
>>> b
[[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]]

最佳答案

方法#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
array([[0, 1],
[0, 1],
[0, 1],
[0, 1],
[1, 0]])

[实际上,range 可以正常工作;我出于习惯写了 arange。]

方法#2,使用max代替argmax来处理多个元素达到最大值的情况:

>>> a = np.array([[0, 1], [2, 2], [4, 3]])
>>> (a == a.max(axis=1)[:,None]).astype(int)
array([[0, 1],
[1, 1],
[1, 0]])

关于python - Numpy:将每行中的最大值更改为 1,所有其他数字更改为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20295046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com