2024-07-05 15:41:11 发布
网友
我需要创建n选择2个组合,目前正在使用Pythonitertools.组合模块。在
对于30000个字符串的单个列表,创建这些组合要运行数小时,并且要使用大量的ram,即
list(itertools.combinations(longlist,2))
有没有一种生成组合的方法可以更好地针对内存中的大型对象进行优化?或者,有没有一种方法可以使用numpy来加速这个过程?在
通过使用二项式系数有(30k选择2)的方法来求解这个=math.factorial(30000)//(math.factorial(2)*math.factorial(30000-2))=449985000组合,你可以立即知道有多少个组合
math.factorial(30000)//(math.factorial(2)*math.factorial(30000-2))
449985000
也就是说,itertools返回一个生成器,这样您就可以迭代它,而无需将内存中的所有组合加载到一个大列表中
我将使用基于^{} 这些是nxn方阵上三阶的指数,其中n=len(long_list)
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')]
一次把它们都弄到手
计时long_list = pd.DataFrame(np.random.choice(list(ascii_letters), (3, 1000))).sum().tolist()
long_list = pd.DataFrame(np.random.choice(list(ascii_letters), (3, 1000))).sum().tolist()
通过使用二项式系数有(30k选择2)的方法来求解这个=
math.factorial(30000)//(math.factorial(2)*math.factorial(30000-2))
=449985000
组合,你可以立即知道有多少个组合也就是说,itertools返回一个生成器,这样您就可以迭代它,而无需将内存中的所有组合加载到一个大列表中
我将使用基于^{}
这些是nxn方阵上三阶的指数,其中n=
len(long_list)
问题是,首先创建整个索引集。itertools不会这样做,只会一次生成一个组合。在
一次把它们都弄到手
^{pr2}$计时
![enter image description here](https://i.stack.imgur.com/iaj2N.png)
long_list = pd.DataFrame(np.random.choice(list(ascii_letters), (3, 1000))).sum().tolist()
相关问题 更多 >
编程相关推荐