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您不接受我的答案有什么原因吗?