【发布时间】:2020-07-14 02:41:38
【问题描述】:
下面的代码可以很好地生成所有可以组合数字的方法,这些数字在步长为 2 时总和为某个值。
增加to_val 和axislengh 会对执行造成重大影响。
有没有办法提高下面的效率? 如果是这样,你能分享一个例子吗?
import itertools
import pandas as pd
def yielder(ctproduct):
for element in ctproduct:
#Making sure the sum of the numbers is between from_val and to_val.
if to_val>sum(element)>=from_val:
yield element
axislengh= 4
from_val= 100
to_val= 104
step=2
#Maybe this is not the best way.
args =[[i for i in range(0, to_val, step)] for x in range(axislengh)]
ctproduct= itertools.product(*args)
df=pd.DataFrame(yielder(ctproduct))
df
【问题讨论】:
-
也许看看 numpy ,它是
arange函数。你也可以用 numpy.where 替换你的 yielder -
我觉得可能还有一个递归/DP解决方案。