2017-06-23 10 views
1

私は、形状m * n、またはmの行とnの列の入力行列を使用しています。 のすべての可能な組み合わせの要素ごとの積を計算したいと思います。したがって、形状m * n*nの行列を出力する必要があります。
より具体的には、私の入力行列に列が[c1, c2, c3 ... cn]であるとします。私の出力行列は[c1*c1 c1*c2 ... c1*cn c2*c1 c2*c2 ... cn*cn]のようになります。ci*cjはベクトルcicjの要素ごとの乗算を表すベクトルです。numpyで可能なすべての列ごとの乗算?

numpy APIを使用してこれを行うためのきちんとした方法を探して、forループを使用したくありません。

答えて

2

一つのアプローチは、第2および第3のものに沿ってシングルトン寸法を有する2つの3D拡張バージョンに入力アレイを拡張した後、要素ごとの乗算を実行し、最終的な変形が2D最終出力のために必要とされた後​​を使用することであろう。

したがって、実装は次のようになり -

(a[:,:,None]*a[:,None,:]).reshape(a.shape[0],-1) 

...を利用して、別の言い方をすると、第二の拡張バージョンにNone後に最後の軸をスキップするであろう -

(a[...,None]*a[:,None]).reshape(a.shape[0],-1) 

別アプローチでnp.einsum -

np.einsum('ij,ik->ijk',a,a).reshape(a.shape[0],-1) 
関連する問題