Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在3个大列表上迭代以比较和分配值_Python - Fatal编程技术网

Python 在3个大列表上迭代以比较和分配值

Python 在3个大列表上迭代以比较和分配值,python,Python,我有一段代码,我需要通过许多列表来读取和分配值 该代码执行以下操作: 首先,对于实体中的每个元素(第一个列表1300),代码将读取包含多行的文本文件(第二个列表5000)。每行包含两个值。之后,代码将检查每行中的第一个值是否存在于功能列表(3rdlist 17000)中,如果是,则将该行中的第二个值写入矩阵。 代码正在运行,但效率低下且速度极慢。(超过12小时) 如果有人告诉我如何解决这个问题,我将不胜感激。您在内部循环中的功能查找速度很慢O(n),并且重复了1300x5000~6.5M次。您可

我有一段代码,我需要通过许多列表来读取和分配值

该代码执行以下操作: 首先,对于实体中的每个元素(第一个列表1300),代码将读取包含多行的文本文件(第二个列表5000)。每行包含两个值。之后,代码将检查每行中的第一个值是否存在于功能列表(3rdlist 17000)中,如果是,则将该行中的第二个值写入矩阵。 代码正在运行,但效率低下且速度极慢。(超过12小时)


如果有人告诉我如何解决这个问题,我将不胜感激。

您在内部循环中的功能查找速度很慢
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)