Python 在3个大列表上迭代以比较和分配值
我有一段代码,我需要通过许多列表来读取和分配值 该代码执行以下操作: 首先,对于实体中的每个元素(第一个列表1300),代码将读取包含多行的文本文件(第二个列表5000)。每行包含两个值。之后,代码将检查每行中的第一个值是否存在于功能列表(3rdlist 17000)中,如果是,则将该行中的第二个值写入矩阵。 代码正在运行,但效率低下且速度极慢。(超过12小时)Python 在3个大列表上迭代以比较和分配值,python,Python,我有一段代码,我需要通过许多列表来读取和分配值 该代码执行以下操作: 首先,对于实体中的每个元素(第一个列表1300),代码将读取包含多行的文本文件(第二个列表5000)。每行包含两个值。之后,代码将检查每行中的第一个值是否存在于功能列表(3rdlist 17000)中,如果是,则将该行中的第二个值写入矩阵。 代码正在运行,但效率低下且速度极慢。(超过12小时) 如果有人告诉我如何解决这个问题,我将不胜感激。您在内部循环中的功能查找速度很慢O(n),并且重复了1300x5000~6.5M次。您可
如果有人告诉我如何解决这个问题,我将不胜感激。您在内部循环中的功能查找速度很慢
O(n)
,并且重复了1300x5000~6.5M
次。您可以做的第一件事是将功能列表
转换为目录
,并将查找速度提高到O(1)
(消除第三个循环):
您在内部循环中的功能查找速度慢
O(n)
,并且重复了1300x5000~6.5M
次。您可以做的第一件事是将功能列表
转换为目录
,并将查找速度提高到O(1)
(消除第三个循环):
通过预先创建贴图,可以完全优化第三个循环:
# first create a matrix map for fast features lookup
features_map = {feature: index for index, feature in enumerate(features_list)}
for index, entity in enumerate(entities_list):
with open('/home/rana/{}.txt'.format(entity), 'r') as f:
for line in f:
feature, value = line.split() # you might want to validate this, tho
if feature in features_map:
co_occurrence_matrix[index, features_map[feature]] = float(value)
如果文件特别大,您可以通过将I/O部分(加载文件)委托给多个线程来进一步加快速度。您可以通过预先创建映射来完全优化第三个循环:
# first create a matrix map for fast features lookup
features_map = {feature: index for index, feature in enumerate(features_list)}
for index, entity in enumerate(entities_list):
with open('/home/rana/{}.txt'.format(entity), 'r') as f:
for line in f:
feature, value = line.split() # you might want to validate this, tho
if feature in features_map:
co_occurrence_matrix[index, features_map[feature]] = float(value)
如果文件特别大,您可以通过将I/O部分(加载文件)委托给多个线程来进一步加快速度。您使用的python版本是什么?(
range(len(entities_list)-1)
不使用最后一项,这是真的需要吗?)我使用3.5,是的,我不希望最后一个元素可以多次包含一个条目?一个条目多次是什么意思?您使用的python版本是什么?(range(len(entities_list)-1)
不使用最后一个条目,这是真的需要吗?)我使用3.5,是的,我不希望最后一个元素可以多次包含一个条目?一个条目多次是什么意思?关于JJ的相同问题你是对的,我已经解决了。我们可以使用dict
(hashmap)。我得到一个错误:字符串索引必须是j=feature[feature]中的整数。我有一个输入错误(feature
而不是features
),现在试试看。关于jq的相同问题你是对的,我已经解决了。我们可以使用dict
(hashmap)。我得到错误:字符串索引必须是j=feature[feature]中的整数。我有一个输入错误(feature
而不是features
),请立即尝试。
# first create a matrix map for fast features lookup
features_map = {feature: index for index, feature in enumerate(features_list)}
for index, entity in enumerate(entities_list):
with open('/home/rana/{}.txt'.format(entity), 'r') as f:
for line in f:
feature, value = line.split() # you might want to validate this, tho
if feature in features_map:
co_occurrence_matrix[index, features_map[feature]] = float(value)