这是我关于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.dot(a,b)
会返回我预期的array([[1],[3]])
但是当我向Theano询问f(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 :(得分:0)
键入以下内容时
b = numpy.array([1,0])
它内部创建的是一个形状为Rx1的列矩阵。这就是一般如何表示向量。
现在输入时,
b = numpy.array([[1],[0]])
然后将其传递给函数f,它会抛出一个错误,因为它期待一个Vector,并且您正在传递一个Matrix作为第二个参数。将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)
希望这有帮助!