itertools.product 用于所有列

itertools.product for the full range of columns

作为我代码的一部分,我正在尝试获得一个完整的阶乘矩阵,这不是问题,因为我已经有了它的工作代码。但是,我想以一种与输入数量无关的方式对其进行概括。这将需要修改行:

for combination in itertools.product(X[0,:],X[1,:],X[2,:],X[3,:],X[4,:],X[5,:],X[6,:]):

input_list = dfraw.columns[0:n_inputs]
output_list = dfraw.columns[n_inputs:len(dfraw.columns)]

fflvls = 4
lhspoints = 60000
X = np.zeros((n_inputs, fflvls),float)
ii=0
for entrada in input_list:   
    X[ii] = np.linspace(min(dfraw[entrada]), max(dfraw[entrada]), fflvls)
    ii+=1
number=1
i=0
X_fact=np.zeros((int(fflvls**n_inputs),n_inputs),float)
for combination in itertools.product(X[0,:],X[1,:],X[2,:],X[3,:],X[4,:],X[5,:],X[6,:]):
    X_fact[i,:] = (combination)
    i +=1
    number+=1

我想过将 itertools.product 的输入写成带循环的字符串然后求值,但它不起作用,我也看到它被认为是不好的做法

prodstring = ['X[0,:]']
for ii in range(n_inputs):
    prodstring.append(',X[%d,:]'%(ii))
in_products = ''.join(prodstring)
for combination in itertools.product(eval(in_products)):
    X_fact[i,:] = (combination)
    i +=1
    number+=1

还有什么其他方法可以在这个函数中输入所有列? (或类似的)

谁说越努力越好?我吃完午饭回来,我深入研究了 *args 和 **kwargs 作为拖延的一种形式,因为我有时看到他们被提到,我很好奇。它似乎正是我需要的工具。如果这对以后像我这样的其他代码菜鸟有帮助:

args = ()
for ii in range(n_inputs):
    b = (X[ii,:])
    args += (b,)
for combination in itertools.product(*args):
    X_fact[i,:] = (combination)
    i +=1
    number+=1

似乎工作正常。在一个小时的“不工作”中解决了我在大约 4 小时的“工作”中没有解决的问题