矢量化包含dotprodu的函数的

2024-09-27 09:32:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图执行一个矩阵向量积,并将一个标量乘以一个常量向量。我想用向量上的四个不同的权重来做这个,所以我试着把函数向量化。现在我得到了冲突的维度。 代码如下:

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

Tags: 函数代码importnp矩阵randommyfuncarray
2条回答

M.dot(y_0) + d*c应该会给出预期的结果。你知道吗

我相信你的意思是:

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]])

相关问题 更多 >

    热门问题