在大矩阵

时间:2016-05-01 03:20:16

标签: python matrix large-data

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

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

1 个答案:

答案 0 :(得分:1)

从长远来看,我鼓励你使用更适合这项任务的东西。例如,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