Python 如何求矩阵的最大值及其行号

Python 如何求矩阵的最大值及其行号,python,indexing,max,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:

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

我可以用下面的代码得到矩阵中的最大值;但是,我不知道如何获得它的行索引位置。需要注意的是,矩阵的每一行的值也可能相等

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


有人能帮我拿一下世界排名吗

这将很好地完成这项工作。您原来的比率矩阵缺少一些逗号:

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
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
max value: 0.1290337, at row: 1
使用max并枚举:

结果:

(1, 0.1290337)

假设您的数据位于嵌套的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

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

这里是一个使用双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)

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

@chrisis您不接受我的答案有什么原因吗?