python中的lambda函数发生了啥?

Posted

技术标签:

【中文标题】python中的lambda函数发生了啥?【英文标题】:What is happening in lambda function in python?python中的lambda函数发生了什么? 【发布时间】:2018-03-03 06:55:48 【问题描述】:

我正在学习从文本文档中提取特征,发现this tutorial。我无法理解从末尾开始的第三行中的 np.asarray(doc_counts.sum(axis=0)).ravel() 正在返回什么。我检查了这个,它返回了数字列表。我猜是词频,但我不确定。

idx: -1 * idx[1] 在做什么,尤其是乘以 -1。我检查了zip() 函数是否有.idx 关联到访问元素,但找不到。

代码:

import numpy as np
from sklearn.feature_extraction.text import CountVectorizer

docs = <load your docs as an iterable>

count_vect = CountVectorizer()
doc_counts = count_vect.fit_transform(docs)  

word_counts = zip(count_vect.get_feature_names(), np.asarray(doc_counts.sum(axis=0)).ravel())
word_counts = sorted(word_counts, key=lambda idx: -1 * idx[1] )

# Display top 100 words by frequency
word_counts[:100]

谁能解释一下这两行。

提前致谢。

【问题讨论】:

word_counts 中的每个项目 idx 被排序就像它是-1 * idx[1] 我真的不明白否决这个问题的动机。是不是因为**点击 ***down-vote 按钮**** 比回答问题更容易让初学者远离 SO? @OmPrakash 否决票是因为您将这个网站的问题弄得一团糟,这些问题很容易通过简单的谷歌搜索得到回答。 "what does lambda do in sorted python" 你的问题太模糊了。例如,不清楚您是否根本不理解 lambda 函数的概念,在这种情况下,不阅读文档的反对意见是正确的,或者您是否不知道为什么要应用这个特定的 lambda 函数您提供的代码,或者您是否不了解特定的 lambda 函数如何对您的输入进行排序。在任何情况下,对一个不清楚且研究不当的问题投反对票是有道理的。我们不希望网站上出现更多此类问题,因为我们投反对票而不是回答。 @gobrewers14,如果问题不清楚,我深表歉意。问题不是关于python的lambdazip(),而是关于内部代码是如何工作的。 【参考方案1】:

这基本上是指定用作排序基础的键是 -1*idx[1] 。现在word_count 的每个元素都包含一个单词,后跟它的频率。因此,当您编写idx[1] 时,您正在访问频率,该频率被用作对数组进行排序的基础。我认为他将它乘以 -1 的原因是因为 d sorted() 默认按升序排序,所以如果你将 +ve 数字列表乘以 -1 并按升序排序,你会得到原始列表的降序order,这正是您想要的,按频率降序排列的单词列表。

您可以阅读有关使用 lambda 和 key in sorted on this page 的更多信息。

【讨论】:

以上是关于python中的lambda函数发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章

C++11 中的“转换构造函数”发生了啥变化? [复制]

python:我怎么知道发生了啥类型的异常?

函数返回时发生了啥

这个函数顶部发生了啥

这个构造函数和析构函数发生了啥?

如何判断调用函数时引用了啥? [复制]