【发布时间】:2019-05-07 12:06:30
【问题描述】:
我正在尝试生成一个表示字符串和列表元素匹配的向量。我在python3.x中做了一个函数:
def vector_build (docs, var):
vector = []
features = docs.split(' ')
for ngram in var:
if ngram in features:
vector.append(docs.count(ngram))
else:
vector.append(0)
return vector
效果很好:
vector_build ('hi my name is peter',['hi', 'name', 'are', 'is'])
输出:[1, 1, 0, 1]
但此功能无法扩展到重要数据。当它的字符串参数 'docs' 大于 190kb 时,它需要更多的时间。所以我试图用 map 函数替换 for 循环,例如:
var = ['hi', 'name', 'are', 'is']
doc = 'hi my name is peter'
features = doc.split(' ')
vector = list(map(var,if ngram in var in features: vector.append(doc.count(ngram))))
但这会返回此错误:
SyntaxError: 无效语法
有没有办法将 for 循环替换为 map、lambda、itertools 以加快执行速度?
【问题讨论】:
-
我认为您需要查看
map的文档。这不是你将如何执行它。第一个参数是您要使用的函数,其余参数是map的第一个参数中函数的输入。另外,我认为你走这条路不会有太多收获。 -
谢谢,您有没有建议更有效的库或函数来加快这个过程?
-
Numpy 可能更快——通常是这样。具体看
numpy.isin。 -
我不能使用 numpy,因为它稍后会在 .NET 实例上运行,该实例在读取 python3 的 numpy 时会出现问题。
-
map和 list-comprehensions 并不比等效的 for 循环快。
标签: python-3.x for-loop time lambda itertools