请问我该如何处理以下情况?

时间:2019-10-01 03:53:54

标签: python-3.x list dictionary

我有3个列表

x = [1,2,3,4,5]
y = [0.1,0.01,0.001,0.0001]
z = [100,200,300,400]

我需要这样选择:

state1:

1 --->0.1--->100
1 --->0.1--->200
1 --->0.1--->300
1 --->0.1--->400
==============
state2:

1 --->0.01--->100
1 --->0.01--->200
1 --->0.01--->300
1 --->0.01--->400
.
.
.
.
.
5 --->0.0001--->100
5 --->0.0001--->200
5 --->0.0001--->300
5 --->0.0001--->400

在每种选择状态下,我都需要将它们放在下面的代码段中:

params = {'n_estimators': 100, 'max_depth':1, 'min_samples_split': 2,
          'learning_rate': 0.1, 'loss': 'ls'}
clf = ensemble.GradientBoostingRegressor(**params)

clf.fit(X_train, y_train)
mse = mean_squared_error(a4, clf.predict(a3))
mae=mean_absolute_error(a4,clf.predict(a3))
r2=r2_score(a4, clf.predict(a3))
def mape_vectorized(a, b): 
    mask = a != 0
    return (np.fabs(a[mask] - b[mask])/a[mask]).mean()
print("MAPE:%.5f" %mape_vectorized(a4, clf.predict(a3)))
print("MAE: %.5f" % mae)
print("MSE: %.5f" % mse)
print("R2:  %.5f" % r2)

并将结果打印到每个状态。而不是手动进行操作,而是从每个状态中逐个元素地选择,这将需要时间。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以使用itertools.product枚举每个状态:

import itertools

x = [1, 2, 3, 4, 5]
y = [0.1, 0.01, 0.001, 0.0001]
z = [100, 200, 300, 400]

for s in itertools.product(x, y, z):
    print(s)

然后,可以将生成器中的每个状态用作自变量以提供回归。