2016-08-29 10 views
0

1D配列A = [a、b、c ...](長さN_A)と形状の3D配列T(N_A、N_B、N_A)を持っています。 Aは対角N_A×N_A行列を表すことを意味する。対角行列をベクトルとして格納した乗算配列

Aを高密度ストレージに昇格させることなく、AとTの縮小を実行したいと思います。特に、私は

np.einsum('ij, ikl', A, T) 

np.einsum('ikl, lm', T, A) 

それがスパースを維持しながら、このようなことを行うことが可能であるの操作を行いたいのですが?それは1がより複雑なインデックスパターンに一般化する方法私にははっきりしていないので、

注この質問は、

dot product with diagonal matrix, without creating it full matrix

が同一ではないに似ています。

答えて

2

np.einsum('ij, ikl', np.diag(a), t)(a * t.T).Tに相当します。

np.einsum('ikl, lm', t, np.diag(a))は、a * tに相当します。

(試行錯誤で見つかりました)

+0

黒い魔法のようなビットですが、ちょっと、それは動作します!ありがとう! – AGML