我试图执行一个矩阵向量乘积,并将一个标量乘以一个常数向量。我想在该向量上使用四个不同的权重来执行此操作,因此我尝试对函数进行向量化。现在,我得到了矛盾的尺寸。 代码如下:
import numpy as np
M = np.random.rand(3,3)
d = np.random.rand(3)
Myfunc = lambda y,t: M.dot(y) + d*t
vFunc = np.vectorize(Myfunc,excluded = ['y'])
y_0 = np.array([1,1,1])
c = np.array([0.5,1,1.5])
print(vFunc(y_0,c))
现在,这给了我一个错误:
ValueError: operands could not be broadcast together with shapes (3,) (4,)
我不知道为什么。据我了解,它应该给我三个不同的结果。
预期结果如下: 如果我使用c作为标量来调用函数,则结果应该只是一个向量:
M.dot(y) + d*scalar
如果我用c是三个元素的向量来调用它,我想要一个三个向量的列表作为结果:
M.dot(y) + d*c1
M.dot(y) + d*c2
M.dot(y) + d*c3
答案 0 :(得分:0)
M.dot(y_0) + d*c
应该会给您预期的结果。
答案 1 :(得分:0)
我相信您的意思是:
In [103]: M = np.arange(9).reshape([3, 3])
In [104]: y = np.arange(3)
In [105]: c = np.arange(3) + 1
In [106]: d = 4
In [107]: M @ y + (d * c)[:, None]
Out[107]:
array([[ 9, 18, 27],
[13, 22, 31],
[17, 26, 35]])