2016-10-12 5 views
0

異なるパラメータ値を持つ関数を実行したい。私は完璧に動作するコードの次のスニペットがあります。しかし複数のリストに出力関数を追加する

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>を使用して試してみました。

答えて

3

あなたはので、多分これはあなたがやりたいだろうただ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_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)) 

最後の注意あなたはzipを呼び出していることを修正することができます:これらのすべてにおいて、iが使用されていないため、「for i, tenum in enumerate(tau)」を「for tenum in tau」に置き換えることができます。

+0

ありがとうございます。非常に明確な答え! 'i'はnumpyの配列を繰り返すいくつかの試みの残りの部分でした。それを指摘してくれてありがとう。 –

+0

Btw。あなたの最後の提案は機能しませんでした。 cvxEDA関数によってスローされた、/: 'float'と 'tuple''のための 'TypeError:unsupported operand type'を返しました。 –

+0

'' i、 '"を削除するだけでなく、 'enumerate'を削除してもよろしいですか? 'tenum'は'(0、first_tenum) '、'(1、second_tenum) 'などのように設定されます。 –

3
tau = np.arange(2,4.01,0.1) 
results = [[] for _ in range(7)] 
for i, tenum in enumerate(tau): 
    data = foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01) 
    for r,d in zip(results, data): 
     r.append(d) 
r, p, t, l, d, e, _obj = results 
+0

2番目のforループでは、インデックスとして 'r'を、プレースホルダとして' d'を使用しますが、 'r'と' d'もターゲット変数です。それは意図的ですか?そのループではどうなりますか? –

+0

@RobinKramerは変数名だけです。他の名前を使用することもできます。ここで名前の衝突にごめんなさい。 – Alex

関連する問題