2016-04-26 6 views
1
a = np.asarray([1,2,3]) 

b = np.asarray([2,3,4,5]) 

a.shape 

(3,) 

b.shape 

(4,) 

で乗算2つの1D行列I aとbパイソン:numpyの

1 
2 * 2 3 4 5 
3 

np.dot(b.transpose())

の製品の3×4行列を望ん
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: objects are not aligned 

ドットプロダクトは、配列が2dのときの行列乗算と同等であるため、np.dotは機能しません。

答えて

3

これはnp.outer(a, b)で製造する他の方法:

In [2]: np.outer([1, 2, 3], [2, 3, 4, 5]) 
Out[2]: 
array([[ 2, 3, 4, 5], 
     [ 4, 6, 8, 10], 
     [ 6, 9, 12, 15]]) 
+0

うわー、これは、まさに私が欲しいものです、そして、私の既存のコードからの変更の最小量を必要とします。ありがとう! – Jobs

0

asarrayの代わりにasmatrixを使用してください。中

import numpy as np 
a = np.asmatrix([1,2,3]) 
b = np.asmatrix([2,3,4,5]) 
a.shape #(1, 3) 
b.shape #(1, 4) 
np.dot(a.transpose(),b) 

結果:

matrix([[ 2, 3, 4, 5], 
     [ 4, 6, 8, 10], 
     [ 6, 9, 12, 15]]) 
3

matrixサブタイプを使用する必要はありません。 Regular arrayは2dに拡張できます(必要に応じて転置されます)。

In [2]: a=np.array([1,2,3]) 
In [3]: b=np.array([2,3,4,5]) 

In [4]: a[:,None] 
Out[4]: 
array([[1], 
     [2], 
     [3]]) 

In [5]: a[:,None]*b # outer product via broadcasting 
Out[5]: 
array([[ 2, 3, 4, 5], 
     [ 4, 6, 8, 10], 
     [ 6, 9, 12, 15]]) 

その列配列

In [6]: np.array([[1,2,3]]).T 
Out[6]: 
array([[1], 
     [2], 
     [3]]) 

In [7]: np.array([[1],[2],[3]]) 
Out[7]: 
array([[1], 
     [2], 
     [3]]) 

In [9]: np.atleast_2d([1,2,3]).T 
Out[9]: 
array([[1], 
     [2], 
     [3]]) 
+0

ありがとうございました!これらは非常に役に立ちます。 – Jobs

0

次のコードは、のように配列を再形成しながら、あなたは、あなたがしなければならない、間違いをした基本的に要求しないが行列の乗算特性が満足されるようにそれらを再形成する。

a = np.asarray([1,2,3]) 
    b = np.asarray([2,3,4,5]) 
    a.reshape(3,1)