如何解决使用另一个数组在Numpy ndarray中选择某些索引
我试图在3D数组中标记最大值的值和索引,以在第三个轴上获取最大值。 现在,这在较低维度上是显而易见的:
argmaxes=np.argmax(array)
maximums=array[argmaxes]
,但对于大于1D的数字,NumPy无法正确理解第二种语法。
假设我的3D阵列的形状为(8,8,250)。 argmaxes=np.argmax(array,axis=-1)
将返回一个(8,8)数组,其数字在0到250之间。现在我的预期输出是一个(8,8)数组,其中包含第三维的最大数字。我可以使用maxes=np.max(array,axis=-1)
来实现这一点,但这需要重复两次相同的计算(因为以后的计算需要同时使用值和索引)
我也可以做一个粗糙的嵌套循环:
for i in range(8):
for j in range(8):
maxes[i,j]=array[i,j,argmaxes[i,j]]
但是有更好的方法吗?
解决方法
您可以使用高级索引。当形状为(8,8,3)
时,这是一种更简单的情况:
arr = np.random.randint(99,size=(8,3))
x,y = np.indices(arr.shape[:-1])
arr[x,y,np.argmax(array,axis=-1)]
样品运行:
>>> x
array([[0,0],[1,1,1],[2,2,2],[3,3,3],[4,4,4],[5,5,5],[6,6,6],[7,7,7]])
>>> y
array([[0,7],[0,7]])
>>> np.argmax(arr,axis=-1)
array([[2,1]],dtype=int64)
这是一个直观的数组示例,可以帮助您更好地理解数组:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。