2016-03-30 10 views
2

これは私の最初の質問stackoverflowです。予想されるフォーマットに合っていることを願っています。ドットプロダクトのディメンションの問題は、

私は単に行列とベクトルとの内積を計算する関数を作成しようとしている:

A = T.matrix() 
B = T.vector() 
C = T.dot(A,B) 

a = numpy.array([[1,2],[3,4]]) 
b = numpy.array([[1],[0]]) 

f = function([A,B],C) 

私はnumpyのに製品を尋ねるとき、私は何の問題もありません。私の予想array([[1],[3]])

を返します。しかし、私はTheanoにf(a,b)を要求したとき、私はこのエラーを持っているnumpy.dot(a,b)TypeError: ('Bad input argument to theano function with name "<stdin>:1" at index 1(0-based)', 'Wrong number of dimensions: expected 1, got 2 with shape (2, 1).')

私の理解では、Theanoタイピングが私のYは必ずしも1Dにするベクトルとして宣言期待ということでした。 私は代わりにb = numpy.array([1,0])で試しました。たぶん、theanoは、それが計算することができる列でなければならないことを理解するでしょうか? 私が得た結果はarray([[ 2., 2.],[ 4., 4.]])です。これはさらに私にとって謎です。

私は把握できる説明で、似たような話題を見つけましたが、まったく見つかりませんでした。私はそれがあなたの多くにとって明白に見えなければならないことを認識しますが、私は手に感謝します!

答えて

0

b = numpy.array([1,0]) 

を入力すると、それは内部的に作成されますが、形状Rx1との列の行列です。それがベクトルが一般的にどのように表現されるかです。今

あなたが入力し、

b = numpy.array([[1],[0]]) 

そしてFを機能させることを渡し、それはベクトルを期待しているし、あなたが2番目のパラメータとして行列を渡しているので、それはエラーがスローされます。 BをB型の行列に変更しても問題ありません。だから、

、このいずれかの操作を行います。 -

A = T.matrix() 
B = T.matrix() 
C = T.dot(A,B) 

a = numpy.array([[1,2],[3,4]]) 
b = numpy.array([[1], [0]]) 

f = function([A,B],C) 

print f(a,b) 

それとも、ベクター自体としてBを扱い、これは助け

A = T.matrix() 
B = T.vector() 
C = T.dot(A,B) 

a = numpy.array([[1,2],[3,4]]) 
b = numpy.array([1,0]) 

f = function([A,B],C) 

print f(a,b) 

希望になるベクトルを渡すことができます!

+0

あなたの答えをありがとう。私はこれらの解決法をすでに試していましたが、両方とも配列([[2,2]、[4,4]])を返します。しかし、たぶん私はちょうどT.dot()が最初にしたことを誤解しているかもしれません... –

+0

上記のコードはそれぞれ[1 3]と[[1] [3]を返します。最初のケースでは、次元2x1から返されるベクトルです。 2番目のケースでは、次元2x1が返される行列です。 'numpy.dot(a、b)'を試すことで結果を確認できます。 –

+0

両方のコードを再度実行しました。はい、私は[1,3]ベクトルを取得します。 結果として、[2,2]、[4,4]]を持っていたときに、私が何かしらの奇妙なことを見つけられなかったのです。 cmdコンソールで何か問題が起きている必要があります。とにかくありがとう! –

関連する問題