首页 > 解决方案 > 如何将满足条件的numpy数组中的第一个值设置为1但不设置其余值

问题描述

我想将 numpy 数组中的最大值设置为 1,将其余值设置为 0,以便新数组中只有一个等于 1 的值。

现在我正在这样做:

new_arr = np.where(arr == np.max(arr), 1, 0)

但是,如果其中有多个arr等于1 的np.max(arr)值,那么将有多个new_arr等于 1 的值。我如何使它只有一个new_arr等于 1 的值(第一个等于的值np.max(arr)似乎是一个不错的选择但不是必须的)。

标签: pythonarraysnumpy

解决方案


您可以使用:

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

这也适用于多维数组。np.argmax给出 max 元素的第一个实例的扁平化索引,并将扁平化索引np.unravel_index转换为基于数组形状的索引.


推荐阅读