【问题标题】:How works python key=operator.itemgetter(1))?python key=operator.itemgetter(1)) 是如何工作的?
【发布时间】:2020-05-20 16:30:08
【问题描述】:

我有一个矩阵,我需要找到最大元素及其数量。如何在没有运算符(with for)的情况下重写它?

    for j in range(size - 1):
        i, val = max(enumerate(copy[j::, j]), key=operator.itemgetter(1))
        copy = change_rows(copy, j, i)
        P = change_rows(P, j, i) 

实际上,也许您可​​以解释一下这个字符串的含义?

i, val = max(enumerate(copy[j::, j]), key=operator.itemgetter(1))

【问题讨论】:

  • 您可能正在寻找np.argmax(),它会为您获取数组中最大值的索引。

标签: python matrix key operator-keyword


【解决方案1】:

让我们分解这一行。

i, val = max(enumerate(copy[j::, j]), key=operator.itemgetter(1))

首先,enumerate()copy[j::,j] 上创建一个迭代器,生成索引-值对。例如,

>>> for i, val in enumerate("abcd"):
...     print(i, val)
...
0 a
1 b
2 c
3 d

接下来,max() 函数用于查找序列中最大的项目。但我们希望它以copy[j::,j] 的值为目标,而不是我们也从enumerate() 获得的索引。指定key=operator.itemgetter(1) 告诉max() 查看(i,val) 对并找到具有最大val 的一对。

使用np.argmax() 可能会更好,尤其是因为val 未被使用。

>>> import numpy as np

>>> for j in range(size - 1):
...     i = np.argmax(copy[j::, j])    # Changed this line.
        copy = change_rows(copy, j, i)
        P = change_rows(P, j, i)

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2021-03-13
    • 2021-03-24
    • 2013-04-10
    • 1970-01-01
    相关资源
    最近更新 更多