2016-07-11 3 views
2

ドットプロダクトを使用するために、しばしば(5,1)に(5,1)を変形しなければならないことがわかりました。私はちょうど形状(5、)のベクトルでドットプロダクトを使うことができないのですか?numpy:形状(5,1)と(5、)のベクトルの違いは何ですか?

+3

http://stackoverflow.com/questions/22053050/difference-between-numpy-array-shape-r-1-and-r?rq=1 –

+0

_ "私はちょうど使用することはできません(5、)のベクトルを持つドットプロダクト "_ - あなた**はちょうどそれをすることができます – Eric

答えて

2

内積を使用するには、(2次元配列で表される)の行列を必要としています。次元(5、)を持つ配列は、5つの項目のフラットな配列(1D配列)です。ここで、as(5,1)は1列と5行の行列です。

>>> import numpy as np 
>>> np.zeros((5,)) 
array([ 0., 0., 0., 0., 0.]) # single flat array 
>>> np.zeros((1,5)) 
array([[ 0., 0., 0., 0., 0.]]) # array with-in array 
>>> np.zeros((5,1)) 
array([[ 0.], 
     [ 0.], 
     [ 0.], 
     [ 0.], 
     [ 0.]]) 
>>> 
2

arr = np.ones((5))で配列を作成すると、配列がarr = np.ones((5, 1))で作成されたときに5要素の1D配列が得られ、5行と1列の2D配列が作成されるからです。次の例はあなたにそれがより明確になるだろう:

>>> import numpy as np 
>>> a = np.ones((5, 1)) 
>>> a 
array([[ 1.], 
     [ 1.], 
     [ 1.], 
     [ 1.], 
     [ 1.]]) 
>>> a = np.ones((5)) 
>>> a 
array([ 1., 1., 1., 1., 1.]) 
関連する問題