python - 如何沿numpy数组的给定轴索引最大值的每次出现?
问题描述
假设我有以下 numpy 数组。
Q = np.array([[0,1,1],[1,0,1],[0,2,0])
问题:如何识别每个最大值沿轴 1 的位置?因此,所需的输出将类似于:
array([[1,2],[0,2],[1]]) # The dtype of the output is not required to be a np array.
使用 np.argmax 我可以识别沿轴的最大值的第一次出现,但不能识别后续值。
In: np.argmax(Q, axis =1)
Out: array([1, 0, 1])
我还看到了依赖于使用 np.argwhere 使用这样的术语的答案。
np.argwhere(Q == np.amax(Q))
这在这里也行不通,因为我不能限制 argwhere 沿单个轴工作。我也不能只是将 np 数组展平为单个轴,因为每行中的最大值会有所不同。我需要识别每行最大值的每个实例。
有没有一种pythonic方法可以在不循环整个数组的每一行的情况下实现这一点,或者是否有一个类似于 np.argwhere 的函数接受一个轴参数?
任何见解将不胜感激谢谢!
解决方案
尝试np.where
:
np.where(Q == Q.max(axis=1)[:,None])
输出:
(array([0, 0, 1, 1, 2]), array([1, 2, 0, 2, 1]))
不是您想要的输出,但包含等效信息。
您还可以使用np.argwhere
which 为您提供 zip 数据:
np.argwhere(Q==Q.max(axis=1)[:,None])
输出:
array([[0, 1],
[0, 2],
[1, 0],
[1, 2],
[2, 1]])
推荐阅读
- python - Jupyter notebook 在缓存中存储脚本?如何解决?
- vba - Userform VBA 在打印前选择打印机
- javascript - 错误:未定义不是反应原生的函数
- java - 为我的 MSSQL 配置加载 bean 对象时出现 AbstractMethodError
- android - Adobe Phonegap 推送通知与 Android 上的 Firebase Cloud
- excel - 使用通配符从其他工作簿中获取数据 ERROR
- android - Android Studio : 您在 android studio 中被此服务器永久封禁
- shell - IntelliJ IDEA 中的“Clear All”快捷方式,sbt-shell 窗口
- actionscript-3 - 闪投接球游戏
- elasticsearch - Elasticsearch/Logstash 错误:com.mysql.jdbc.Driver 未加载 - 无法在服务器上找到 mysql-connector-java-5.1.36-bin.jar