python - 如何将满足条件的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)
似乎是一个不错的选择但不是必须的)。
解决方案
您可以使用:
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
转换为基于数组形状的索引.
推荐阅读
- python - 迭代元组列表并根据条件创建字典
- reactjs - Mongodb正确分页
- javascript - 如何根据字符串命名函数?
- scikit-learn - 将 X.toarray 反转为 sklearn 中的 CountVectorizer
- android - react-native run-android 构建失败
- scheme - 了解教会数字
- google-analytics - 我如何在谷歌分析收集上覆盖 uip
- windows - Windows 中的 Git Bash 无法启动
- mysql - 如何根据 2 个不同的表获取不存在的记录
- c# - 有没有办法告诉编译器在 C# 中使用“快速数学”或类似的东西进行编译?