2017-02-18 11 views
2
>>> c= array([[[1, 2], 
       [3, 4]], 

       [[2, 1], 
       [4, 3]], 

       [[3, 2], 
       [1, 4]]]) 
>>> x 
array([[0, 1, 2], 
     [3, 4, 5]]) 

リターン私各列は、通常の行列乗算にxの各対応する列を乗算Cの各行列の積になるようにマトリックス。私はそれをベクトル化する方法を見つけ出そうとしているか、少なくともループを使って解決していない。 numpyのアレイの動作方法

array([[6, 6, 16] 
     12, 16, 22]]) 

は、この操作はさらにさんは、私は行列の配列を持っていることを言わせて拡張し

>>> c 
    array([[[1, 2], 
    [3, 4]], 

    [[2, 1], 
    [4, 3]], 

    [[3, 2], 
    [1, 4]]]) 
>>> x 
    array([[[1, 2, 3], 
    [1, 2, 3]], 

    [[1, 0, 2], 
    [1, 0, 2]], 

    [[2, 3, 1], 
    [0, 1, 0]]]) 


def fun(c,x): 
    for i in range(len(x)): 
     np.einsum('ijk,ki->ji',c,x[i]) 
     ##something 

だから基本的に、私はCの全てでのx乗の各行列を持つようにしたいと言います。

Xcのをベクトル化しようと、私は問題を解決するために問題が発生してきたので、私はこれをやっているループ

理由のためにこれを導入することなく、Cに似た構造体を返す(操作は通常の行列の列を次のベクトル乗算)、cは3D配列、上からcのように、各要素が行列である列ベクトル(numpyでは、上の形式)。 Xは各要素が1D配列の行列です。 Xcの出力は1D配列でなければなりません。

+0

ので、予想される出力は、3Dもありか? – Divakar

+0

@Divakarはい、楽しみのために(c、x)3D配列にする必要があります。 – ElleryL

答えて

1

あなたがnp.einsum使用することができます - 単にxの文字列表記の開始時に新しい次元を追加し、xの3Dケースについては

In [155]: c 
Out[155]: 
array([[[1, 2], 
     [3, 4]], 

     [[2, 1], 
     [4, 3]], 

     [[3, 2], 
     [1, 4]]]) 

In [156]: x 
Out[156]: 
array([[0, 1, 2], 
     [3, 4, 5]]) 

In [157]: np.einsum('ijk,ki->ji',c,x) 
Out[157]: 
array([[ 6, 6, 16], 
     [12, 16, 22]]) 

- サンプル実行

np.einsum('ijk,ki->ji',c,x) 

をそれに対応して出力文字列表記でもそうです -

np.einsum('ijk,lki->lji',c,x) 

サンプル実行 -

In [151]: c 
Out[151]: 
array([[[1, 2], 
     [3, 4]], 

     [[2, 1], 
     [4, 3]], 

     [[3, 2], 
     [1, 4]]]) 

In [152]: x 
Out[152]: 
array([[[1, 2, 3], 
     [1, 2, 3]], 

     [[1, 0, 2], 
     [1, 0, 2]], 

     [[2, 3, 1], 
     [0, 1, 0]]]) 

In [153]: np.einsum('ijk,lki->lji',c,x) 
Out[153]: 
array([[[ 3, 6, 15], 
     [ 7, 14, 15]], 

     [[ 3, 0, 10], 
     [ 7, 0, 10]], 

     [[ 2, 7, 3], 
     [ 6, 15, 1]]]) 
+0

私はijkを複数回操作しようとしました。私はこれをすることができませんでした。 xが行列の配列でもある場合、戻り値は行列の配列で、各行列は上記のように生成されます。 – ElleryL

+0

@ElleryL「行列の配列」の意味がわからない。サンプルを投稿できますか? – Divakar

+0

元の質問を編集しました。私がうまく説明しているかわからない – ElleryL

関連する問題