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的lambda
或zip()
,而是关于内部代码是如何工作的。
【参考方案1】:
这基本上是指定用作排序基础的键是 -1*idx[1]
。现在word_count
的每个元素都包含一个单词,后跟它的频率。因此,当您编写idx[1]
时,您正在访问频率,该频率被用作对数组进行排序的基础。我认为他将它乘以 -1 的原因是因为 d sorted()
默认按升序排序,所以如果你将 +ve 数字列表乘以 -1 并按升序排序,你会得到原始列表的降序order,这正是您想要的,按频率降序排列的单词列表。
您可以阅读有关使用 lambda 和 key in sorted on this page 的更多信息。
【讨论】:
以上是关于python中的lambda函数发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章