误解numpy.矢量化

mnemlml8  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(175)

我想对向量中的每一行应用一个函数。即使在下面这样一个简单的例子中,我也无法让它工作。
我做了一个函数,取两个向量,并对它们应用点积。

import numpy as np

def func(x,y):
    return np.dot(x,y)

y=np.array([0, 1, 2])
x=np.array([0, 1, 2])

print(func(x,y))

当然,输出是5。现在我想插入多个向量x,并得到每个向量的解。我不想使用for循环,所以我尝试使用vectorize函数。例如,下面我定义X=(x1,x2,x3),并希望输出unc(X,y)=(unc(x1,y),unc(x2,y),unc(x3,y))。为什么下面的代码不这样做:

import numpy as np

def func(x,y):
    return np.dot(x,y)

y=np.array([0, 1 , 2])
X=np.array([[0,0,0], [1,1,1], [2,2,2]])

vfunc=np.vectorize(func)
print(vfunc(X,y))
q35jwt9p

q35jwt9p1#

要做的第一个技巧是排除y 参数(它是 x 中所有行的固定值)。
第二个窍门是传递签名:两个参数都是数组,结果是标量。
因此,要对函数进行矢量化,请运行:

vfunc = np.vectorize(func, excluded=['y'], signature='(n),(n)->()')

然后,当调用vfunc(X,y)时,将得到:

array([0, 3, 6])

相关问题