Python 如何将矩阵的每一列乘以表中的向量元素?

Python 如何将矩阵的每一列乘以表中的向量元素?,python,theano,elementwise-operations,Python,Theano,Elementwise Operations,我有一个带有100个元素的Theanodvector。我还有一个5列100行的矩阵(换句话说,每列包含100个元素) 现在我需要对每一列应用向量的元素相乘。在Theano中,正确的方法是什么 我是否应该通过将向量重复5次并进行转置,然后将相同形状元素的两个矩阵相乘来创建一个新矩阵 已添加 我已经了解到,在numpy中,为了实现所需的行为,我只需要将向量声明为一列的2D数组。换句话说,我需要用“列”向量替换“行”向量(或者我需要垂直而不是水平地写入值)。在这种情况下,numpy将根据需要广播向量(

我有一个带有100个元素的Theano
dvector
。我还有一个5列100行的矩阵(换句话说,每列包含100个元素)

现在我需要对每一列应用向量的元素相乘。在Theano中,正确的方法是什么

我是否应该通过将向量重复5次并进行转置,然后将相同形状元素的两个矩阵相乘来创建一个新矩阵

已添加

我已经了解到,在numpy中,为了实现所需的行为,我只需要将向量声明为一列的2D数组。换句话说,我需要用“列”向量替换“行”向量(或者我需要垂直而不是水平地写入值)。在这种情况下,numpy将根据需要广播向量(列)(矩阵的每一列将乘以向量元素)。但是,看起来Theano并没有继承numpy的这种行为:

X = T.dmatrix('X')

w = np.array([
    [10.0, 0.0, 0.0, 0.0, 0.0], 
    [0.0, 10.0, 0.0, 0.0, 0.0], 
    [0.0, 0.0, 10.0, 0.0, 0.0]
    ], dtype=th.config.floatX)
w = np.transpose(w)

W = th.shared(w, name='W', borrow=True)

R = W + X

f = th.function([X], R)

x = np.array([[1.0], [2.0], [3.0], [4.0], [5.0]])
print f(x)
这是我得到的错误:

ValueError: Input dimension mis-match. (input[0].shape[1] = 3, input[1].shape[1] = 1)
Apply node that caused the error: Elemwise{add,no_inplace}(W, X)
Toposort index: 0
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)]
Inputs shapes: [(5, 3), (5, 1)]
Inputs strides: [(8, 40), (8, 8)]
顺便说一句,如果我用以下方式定义
x
,代码就会起作用:

x = np.array([[1.0, 1.0, 1.0], [2.0, 2.0, 2.0], [3.0, 3.0, 3.0], [4.0, 4.0, 4.0], [5.0, 5.0, 5.0]])
我发现的“本机”解决方案是使用操作。更详细地说,我需要使用

Xr = T.extra_ops.repeat(X, 3, axis=1)
此操作将重复列向量3次。因此,我们将得到一个有3列(相同)的矩阵,这个矩阵可以与
W
矩阵元素相乘(或求和)