我想获得一个矩阵的最大值,以及它在矩阵中的行位置。怎么做? 再次感谢。
我可以用以下代码获得矩阵中的最大值;但是,我不确定如何获取其行索引位置。要注意的是,矩阵的每一行也可以具有相等的值。
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
有人可以帮我排行吗?
答案 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)
使用max
和enumerate
:
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)
没有理由将值复制到新数组中。如果您已经在嵌套列表中进行遍历,则只需跟踪索引和最大值即可。