如何将numpy数组中第一个符合条件的值设为1,但不改变其余值

3
我希望将numpy数组中最大值设为1,其余的值设为0,以便新数组中只有一个值等于1。
目前我是这样做的:
new_arr = np.where(arr == np.max(arr), 1, 0)

然而,如果在“arr”中有多个值等于“np.max(arr)”,则“new_arr”中将有多个值等于1。 我该如何做到只有一个值等于1的“new_arr”(第一个等于“np.max(arr)”的值似乎是一个不错的选择,但不是必需的)。
2个回答

2

您可以使用:

new_arr = np.zeros(shape=arr.shape)
new_arr[np.unravel_index(np.argmax(arr),shape=arr.shape)] = 1

这也适用于多维数组。np.argmax提供最大元素的扁平索引,np.unravel_index将扁平索引转换为基于数组形状的索引。


2

你差不多有了。

这将给出最大值最后一次出现的索引。

np.where(arr == np.max(arr))[0][-1]

如果你想要最大值的第一个出现位置,那么它是:

np.where(arr == np.max(arr))[0][0]

例子

import numpy as np

arr = np.array(np.random.choice([1, 2, 3, 4], size=10))
print(arr)

Output : [4 1 2 4 1 1 4 2 4 3]

然后:

np.where(arr == np.max(arr))[0][-1] # last index of max value

Output: 8

或者

np.where(arr == np.max(arr))[0][0] # first index of max value

Output: 0

您可以按索引进行替换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接