在大型矩阵中搜索值

Searching values in a large matrix

我正在使用 python 3.5,我正在编写一个脚本来处理大型电子表格文件。电子表格的每一行都包含一个短语和其他几个相关值。我将文件解析为矩阵,但对于示例文件,它有超过 3000 行(甚至更大的文件应该在预期范围内)。我还有一个 100 个单词的列表。我需要搜索每个单词,矩阵的哪一行将它包含在它的字符串中,并根据它打印一些平均值。

目前我正在遍历矩阵的每一行,然后检查字符串是否包含任何提到的词,但这个过程需要 3000 次迭代,每次检查 100 次。有没有更好的方法来完成这个任务?

在漫长的运行中,我鼓励你使用更适合任务的东西。例如,SQL 数据库。

但如果您坚持编写自己的 python 解决方案,您可以采取以下措施来优化它:

使用集合。集合具有非常有效的成员检查。

wordset_100 = set(worldlist_100)

for row in data_3k:
    word_matches = wordset_100.intersect(row.phrase.split(" "))
    for match in word_matches:
        # add to accumulator
        # this loop will be run less than len(row.phrase.split(' ')) times
        pass

并行化。

from multiprocessing import Pool
from collections import defaultdict


def matches(wordset_100, row):
    return wordset_100.intersect(row.phrase.split(" ")), row


if __name__ == "__main__":
    accu = defaultdict(int)
    p = Pool()
    wordset_100 = set(worldlist_100)
    for m, r in p.map(matches, data_3k):
        for word in m:
            accu[word] += r.number