我想执行具有不同参数值的函数。我有下面的代码片段,它们运行得很好:
tau = np.arange(2,4.01,0.1)
R = []
P = []
T = []
L = []
D = []
E = []
Obj = []
for i, tenum in enumerate(tau):
[r, p, t, l, d, e, obj] = (foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01))
R.append(r)
P.append(p)
T.append(t)
L.append(l)
D.append(d)
E.append(e)
Obj.append(obj)
但是,我想知道:是否有更简单的方法来完成此操作?
我试过使用res.append(foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)
但res[1]
返回<generator object <genexpr> at 0x046E7698>
。
您可以将生成器对象传递给list()
函数,从而将其转换为列表对象,这样一来,您就可以完成所需的工作:
res = []
for i, tenum in enumerate(tau):
res.append(list(foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)))
列表理解甚至更短:
res = [list(foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)) for i, tenum in enumerate(tau)]
不管哪种方式,与您想要的内容相比(将其视为矩阵),这都会使res换位。您可以通过以下方法解决此问题zip
:
res_tr = zip(*res)
R, P, T, L, D, E, Obj = res_tr
编辑:最简单的说,您可以避免使用直接传递给的生成器表达式来构建中间列表zip()
:
R, P, T, L, D, E, Obj = zip(*(list(foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)) for tenum in tau))
最后一点:在所有这些中,您都可以用代替“ for i, tenum in enumerate(tau)
”,for tenum in tau
因为您似乎并没有使用i
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句