查找二维数组中最大值的最后一次出现

时间:2020-11-07 15:38:49

标签: python numpy

我正在尝试查找数组中最后出现的最大值。到目前为止,以下代码是我所拥有的:

a = np.matrix([[1, 2, 3, 4, 5], [99, 7, 8, 9, 10], [99, 12, 13, 99, 15], [16, 99, 18, 19, 20], [99, 22, 23, 24, 99]])
m, n = a.shape
out = np.full((n), np.nan)

for i in range(n):
    out[i] = np.argwhere(a[:, i] == 99)

但是它不断弹出并显示错误,如下所示:

此代码的目的是遍历每一列并找到最大值的最后一次出现(在这种情况下为99),因此结果应类似于[4,3,0,2,4]

预先感谢

enter image description here

2 个答案:

答案 0 :(得分:3)

不需要循环。

argmax默认会找到最大元素的第一个索引,但是我们可以使用flip来更改它。默认情况下,它还会查找整个多维数组的最大值,但是如果传递了轴,则只会在该轴上执行此操作:

out = a.shape[1] - 1 - np.argmax(np.flip(a, axis=1), axis=1)
out = np.array(out).ravel()

答案 1 :(得分:2)

你很近

for i in range(n):
    # first find max value and then the indexes of that value
    z = np.argwhere(a[:, i] == np.amax(a[:, i]))
    w, _ = z.shape
    # extract the position of last max value
    out[i] = z[w - 1, 0]