这是一种使用的方法broadcasting https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html -
b = np.where(a.argmin(0) >= np.arange(a.shape[0])[:,None],a,np.nan)
idx = np.nanargmax(b,axis=0)
out = a[idx,np.arange(a.shape[1])]
样本运行 -
In [38]: a
Out[38]:
array([[5, 4],
[4, 5],
[2, 2],
[6, 1],
[3, 7]])
In [39]: b = np.where(a.argmin(0) >= np.arange(a.shape[0])[:,None],a,np.nan)
...: idx = np.nanargmax(b,axis=0)
...: out = a[idx,np.arange(a.shape[1])]
...:
In [40]: idx
Out[40]: array([0, 1])
In [41]: out
Out[41]: array([5, 5])
或者,如果a
只有正数,我们可以得到idx
简单地与 -
mask = a.argmin(0) >= np.arange(a.shape[0])[:,None]
idx = (a*mask).argmax(0)