在大型矩阵中搜索值
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
我正在使用 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