如何获得矩阵中的最大值及其行号

时间:2019-04-26 13:11:17

标签: python indexing max

我想获得一个矩阵的最大值,以及它在矩阵中的行位置。怎么做? 再次感谢。

我可以用以下代码获得矩阵中的最大值;但是,我不确定如何获取其行索引位置。要注意的是,矩阵的每一行也可以具有相等的值。

ratio =[[0.01556884 0.01556884]
 [0.1290337  0.1290337 ]
 [0.07015939 0.07015939]
 [0.12288323 0.12288323]]
        dup = []
        for k in ratio:
            for i in k:
                dup.append(i)

print(max(dup))

0.1290337

我希望获得已经拥有的最大值, 0.129037 和位置1

有人可以帮我排行吗?

4 个答案:

答案 0 :(得分:2)

这可以很好地完成工作(您的原始ratio矩阵缺少一些逗号):

ratio = [[0.01556884, 0.01556884],
         [0.1290337,  0.1290337],
         [0.07015939, 0.07015939],
         [0.12288323, 0.12288323]]

max_val = 0
idx = None

for i, row in enumerate(ratio):
    if max(row) > max_val:
        max_val = max(row)
        idx = i

print(f"max value: {max_val}, at row: {idx}")
  

输出:

max value: 0.1290337, at row: 1

或更简洁一点:

ratio = [[0.01556884, 0.01556884],
         [0.1290337,  0.1290337],
         [0.07015939, 0.07015939],
         [0.12288323, 0.12288323]]

idx, max_val = max(enumerate(map(max, ratio)), key=lambda x: x[1])

print(f"max value: {max_val}, at row: {idx}")
  

输出:

max value: 0.1290337, at row: 1

答案 1 :(得分:2)

假设您的数据位于嵌套的Python列表中,则可以使用如下生成器来实现:

ratio =[[0.01556884, 0.01556884],
        [0.1290337,  0.1290337 ],
        [0.07015939, 0.07015939],
        [0.12288323, 0.12288323]]
max_val, row_max, col_max = max((value, i, j)
                                for i, row in enumerate(ratio)
                                for j, value in enumerate(row))
print(f'Max value: ratio[{row_max}][{col_max}] = {max_val}')
# Max value: ratio[1][1] = 0.1290337

如果您有NumPy数组,则可以执行以下操作:

import numpy as np

ratio = np.array([[0.01556884, 0.01556884],
                  [0.1290337,  0.1290337 ],
                  [0.07015939, 0.07015939],
                  [0.12288323, 0.12288323]])
row_max, col_max = np.unravel_index(np.argmax(ratio), ratio.shape)
max_val = ratio[row_max, col_max]
print(f'Max value: ratio[{row_max}][{col_max}] = {max_val}')
# Max value: ratio[1][0] = 0.1290337

由于两个包含最大值的数组位置,请注意不同的答案。

答案 2 :(得分:1)

使用maxenumerate

ratio =[[0.01556884, 0.01556884], [0.1290337,  0.1290337 ],[0.07015939, 0.07015939],[0.12288323, 0.12288323]]

print(max(enumerate(map(max, ratio)), key=lambda x:x[1]))

结果:

(1, 0.1290337)

答案 3 :(得分:1)

这是使用double for循环的幼稚实现。

ratio = [[0.01556884, 0.01556884],
         [0.1290337, 0.1290337 ],
         [0.07015939, 0.07015939],
         [0.12288323, 0.12288323]]

max_val = ratio[0][0]
max_loc = (0,0)
for i, row in enumerate(ratio):
    for j, idx in enumerate(row):
        if ratio[i][j] > max_val:
            max_val = ratio[i][j]
            max_loc = (i, j)

print(f"max value {max_val} at {max_loc}")

输出:

max value 0.1290337 at (1, 0)

没有理由将值复制到新数组中。如果您已经在嵌套列表中进行遍历,则只需跟踪索引和最大值即可。