2017-11-29 19 views
0

numpy配列の線形結合をしようとしています。要素の組み合わせnumpy配列のリスト

a = [np.random.normal(0,1, [1,2]), np.random.normal(0,1, [3,4]), np.random.normal(0,1, [10,11])] b = [np.random.normal(0,1, [1,2]), np.random.normal(0,1, [3,4]), np.random.normal(0,1, [10,11])] c = [np.random.normal(0,1, [1,2]), np.random.normal(0,1, [3,4]), np.random.normal(0,1, [10,11])]

は、私は新しいを取得するには、cの要素の値を対応するに基づいてリストabに各配列の各要素を組み合わせた要素単位にしたい:

私はnumpyの配列の3つのリストを持っていますリストdd_i = a_i * c_i + (1-c_i) *b_i(線形結合)

aの各配列の各要素を選択し、bcに対応する要素を見つけて結合することを考えました。しかし、これは面倒で非効率的で、ちょっとばかげていることがわかりました。誰かより良い方法を提案できますか?さて、あなたのリストのすべてを想定し

+2

あなたは何をしようとしているのかわかりません –

+0

'd_i = a_i * c_i +(1-c_i)* b_i'を追加しました。ここで各変数はlistの各配列の各要素を表します。 – ytutow

+0

なぜ配列のリストがありますか? – user2357112

答えて

1

は、私はあなたがする必要があるすべては、リストに対して動作している場合今

d = [a[i] * c[i] + (1-c[i]) * b[i] for i in range(len(a))] 

よりもはるかに効率的なものがあるように起こっているとは思わないし、同じ長さでありますdしばらくして、ジェネレータの理解度を上げることができますか?

d = (a[i] * c[i] + (1-c[i]) * b[i] for i in range(len(a))) 

しかし、1日の終わりに、直線的な時間よりも短い時間で要素の線形結合を作成する方法はありません。

+0

理想的には、リストの理解はリストを作成するのに最も効率的です。しかし、それ以上の操作がある場合は、リスト作成を遅らせることをお勧めします。 – xaav

+0

うわー、あなたは賢いです! – ytutow

+0

@ xaavリストの理解を使用するように更新することはできますが、リストが一度しかトラバースされていない場合は、不要なものを保存しないので、ジェネレータの理解は本当に最も効率的です。 –

関連する問題