如何在另一个较大的数组(6亿个元素)中查找大型数组(100万个元素)的元素

时间:2019-03-12 13:36:44

标签: python numpy multiprocessing bioinformatics

我有一个非常大的文件(包含dbSNP ID),包含100万行,每个包含一个字符串,还有另一个更大的文件(.vcf),包含6亿行,每个包含7-8列。

我想在较大文件中找到较小文件每一行的第一次出现,这使我程序的蛮力复杂度是1,000,000 * 600,000,000倍。我想要一种更快,更省内存的方法。我是使用python进行多处理或并行编程的新手,我不确定如何不使用它们都可以解决这个问题。

我尝试使用numpypandas库对两个文件的较小子集进行类似的操作:

import numpy as np
import pandas as pd

BigFile = pd.Series(arrayOfRowsOfBiggerFile)
SmallFile = pd.Series(arrayOfRowsOfSmallerFile)
FinalList = SmallFile.map(lambda x: np.where(A==x)[0][0]).tolist()

这要花很长时间才能执行,我相信可以通过python多重处理很好地处理。

1 个答案:

答案 0 :(得分:4)

如果我理解正确,那么您实际上是在执行join操作:您希望VCF中其关键字(在这种情况下为RSID)显示在“较小”文件中的所有行。在此处查看文档:{​​{3}}

您的代码将如下所示:

dbsnp = pd.read_csv('path/to/dbsnp', index_col='rsid', ...)
rsids_of_interest = pd.read_csv('path/to/smaller_file', ...)

subset_of_dbsnp = dbsnp.join(rsids_of_interest, how='inner', ...)