在numpy中,找到跨越两个轴的三维阵列的最大值及其索引的有效方法是什么?

在numpy中,找到跨越两个轴的三维阵列的最大值及其索引的有效方法是什么?,numpy,max,argmax,Numpy,Max,Argmax,如何找到一组二维互相关函数的相关峰值和坐标? 给定一个包含一组二维互相关函数的三维阵列。找到最大(峰值)值及其坐标(x和y指数)的有效方法是什么? 下面的代码完成了这项工作,但我认为它效率低下 import numpy as np import numpy.matlib ccorr = np.random.rand(7,5,5) xind = ccorr.argmax(axis=-1) mccorr = ccorr[np.matlib.repmat(np.arange(0,7)[:,

如何找到一组二维互相关函数的相关峰值和坐标? 给定一个包含一组二维互相关函数的三维阵列。找到最大(峰值)值及其坐标(x和y指数)的有效方法是什么?
下面的代码完成了这项工作,但我认为它效率低下

import numpy as np
import numpy.matlib 


ccorr  = np.random.rand(7,5,5)
xind   = ccorr.argmax(axis=-1)
mccorr = ccorr[np.matlib.repmat(np.arange(0,7)[:,np.newaxis],1,5),np.matlib.repmat(np.arange(0,5)[np.newaxis,:],7,1), xind]
yind   = mccorr.argmax(axis=-1)
xind   = xind[np.arange(0,7),yind]
values = mccorr[np.arange(0,7),yind]

print("cross-correlation functions (z,y,x)")
print(ccorr)

print("x and y indices of the maximum values")
print(xind,yind)
print("Maximum values")
print(values)

您需要展平正在搜索的维度,然后分别使用和获取坐标和值

ccorr  = np.random.rand(7,5,5)
cc_rav = ccorr.reshape(ccorr.shape[0], -1)
idx = np.argmax(cc_rav, axis = -1)
indices_2d = np.unravel_index(idx, ccorr.shape[1:])
vals = np.take_along_axis(ccorr, indices = indices_2d, axis = 0)

如果您使用的是
numpy
版本,非常感谢。我想知道,在旧的numpy版本(目前使用1.14.5)中,是否有一种优雅的替代方法可以沿_轴移动_?请检查我添加的解决方法。我想这些应该有用。现在无法检查。如果答案有效,请记住将其标记为已解决!
vals = cc_rav[np.arange(ccorr.shape[0]), idx]
vals = ccorr[np.arange(ccorr.shape[0]), 
             indices_2d[0], indices_2d[1]]