最大值所在的行的索引

时间:2013-05-02 16:08:03

标签: python indexing max

我有这个清单:

dCF3v=[[(1.90689635276794, -44704.76171875)],
       [(1.90689635276794, -44705.76171875)],
       [(1.90689635276794, -44706.76171875)],
       [(1.90689635276794, -44707.76171875)]
      ]

我想知道最大值所在行的索引。在上面的示例中:行索引3。

我已经找到了找到最大值的代码:

CF3a = (abs(x[0][1]) for x in dCF3v)
CF3 = max(CF3a)

如果可能,我想调整此代码,而不必执行经典for and if loops

2 个答案:

答案 0 :(得分:2)

您可以使用enumerate来保留索引和key max参数以查找正确的值:

dCF3v=[[(1.90689635276794, -44704.76171875)],
       [(1.90689635276794, -44705.76171875)],
       [(1.90689635276794, -44706.76171875)],
       [(1.90689635276794, -44707.76171875)]
      ]

CF3a = (abs(x[0][1]) for x in dCF3v)
index, value = max(enumerate(CF3a), key=lambda (index, value): value)
print index,value

答案 1 :(得分:1)

由于您的数据本质上是数字的,我强烈建议您使用numpy模块,因为它的设计部分是为了满足您的要求。

您可以将数据转换为numpy数组

import numpy as np
data = np.array(dCF3v)

然后使用np.argmax查找最大值的索引

idx = np.argmax(data)

这为您提供了展平数组的索引。如果您知道数组的形状,则可以使用模运算将此展平索引轻松转换为行数。您可以像这样获得行数和列数

rows,cols = data.shape

然后是带有模块划分的行号

maxRow = idx%cols

numpy还有一个名为unravel_index的函数,它可以为你完成模运算,

row, col = np.unravel_index(idx, data.shape)
相关问题