在python中对非常大的数据集生成n选择2个组合

2024-07-05 15:41:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建n选择2个组合,目前正在使用Pythonitertools.组合模块。在

对于30000个字符串的单个列表,创建这些组合要运行数小时,并且要使用大量的ram,即

list(itertools.combinations(longlist,2))

有没有一种生成组合的方法可以更好地针对内存中的大型对象进行优化?或者,有没有一种方法可以使用numpy来加速这个过程?在


Tags: 模块对象方法内存字符串numpy列表过程
2条回答

通过使用二项式系数有(30k选择2)的方法来求解这个=math.factorial(30000)//(math.factorial(2)*math.factorial(30000-2))=449985000组合,你可以立即知道有多少个组合

也就是说,itertools返回一个生成器,这样您就可以迭代它,而无需将内存中的所有组合加载到一个大列表中

我将使用基于^{}
这些是nxn方阵上三阶的指数,其中n=len(long_list)

问题是,首先创建整个索引集。itertools不会这样做,只会一次生成一个组合。在

def combinations_of_2(l):
    for i, j in zip(*np.triu_indices(len(l), 1)):
        yield l[i], l[j]

long_list = list('abc')
c = combinations_of_2(long_list)
list(c)

[('a', 'b'), ('a', 'c'), ('b', 'c')]

一次把它们都弄到手

^{pr2}$

计时
long_list = pd.DataFrame(np.random.choice(list(ascii_letters), (3, 1000))).sum().tolist()
enter image description here

相关问题 更多 >