python - 沿某个轴的多维数组的 argmax
问题描述
我有一个看起来像这样的多维数组:
my_array = np.arange(2)[:,None,None] *np.arange(4)[:, None]*np.arange(8)
我正在寻找二维argmax的多维等价物
特别是,我正在寻找沿轴 = 2 的最大值的 argmax。我先尝试整形,但整形会完全破坏整个数组的原始索引信息,所以它可能不起作用。我不知道该怎么做,需要你们的帮助。先感谢您
编辑:期望输出是:
[(0,0,0),(1,3,1),(1,3,2),(1,3,3),(1,3,4),(1,3,5),(1,3,6),(1,3,7)]
这正是沿轴 = 2 的最大值索引的数组
解决方案
为了沿着 3D ndarray 的最后一个轴找到这样的 argmax 索引,我们可以使用沿着这些线的东西 -
In [66]: idx = my_array.reshape(-1,my_array.shape[-1]).argmax(0)
In [67]: r,c = np.unravel_index(idx,my_array.shape[:-1])
In [68]: l = np.arange(len(idx))
In [69]: np.c_[r,c,l]
Out[69]:
array([[0, 0, 0],
[1, 3, 1],
[1, 3, 2],
[1, 3, 3],
[1, 3, 4],
[1, 3, 5],
[1, 3, 6],
[1, 3, 7]])
要将其扩展到通用 ndarray -
In [99]: R = np.unravel_index(idx,my_array.shape[:-1])
In [104]: np.hstack((np.c_[R],l[:,None]))
Out[104]:
array([[0, 0, 0],
[1, 3, 1],
[1, 3, 2],
[1, 3, 3],
[1, 3, 4],
[1, 3, 5],
[1, 3, 6],
[1, 3, 7]])
推荐阅读
- python - 如何在没有 savetxt() 方法的情况下格式化 np 数组?
- php - 请问我如何从这个php代码中station = e.station的数据库中选择?
- python - 生成其中包含固定代码的 python 文件
- excel - excel用户定义函数的#value错误
- flutter - 从上一页重置动画
- kotlin - Kotlin 抽象类必须有构造函数并被初始化
- google-app-engine - 在 GAE Firestore DatastoreException 中启动查询时出错:找不到匹配的索引
- asp.net - System.Configuration.ConnectionStringSettingsCollection.this[string].get 在类中返回 null
- vuejs2 - [Vue 警告]:尝试使用 vee-validate 时未找到注入“$validator”错误
- python - 训练默认感知器标注器