Python numpy函数的力输出形状
我有一个函数,它将2个numpy数组作为输入并返回一个数字(实函数比下面的示例复杂得多):Python numpy函数的力输出形状,python,numpy,Python,Numpy,我有一个函数,它将2个numpy数组作为输入并返回一个数字(实函数比下面的示例复杂得多): def_func(x,y): 返回np.sum(x)*np.sum(y) 到目前为止,一切顺利 但是 >>> the_func([[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]) 441 而不是预期的[36225] 因此,我尝试将初始函数矢量化: vfunc = np.vectorize(the_func) 但是 如何使该函数以我希望看到的形状返回结果(在最后
def_func(x,y):
返回np.sum(x)*np.sum(y)
到目前为止,一切顺利
但是
>>> the_func([[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]])
441
而不是预期的[36225]
因此,我尝试将初始函数矢量化
:
vfunc = np.vectorize(the_func)
但是
如何使该函数以我希望看到的形状返回结果(在最后一个示例中,
[36225]
=[(1+2+3)*(1+2+3),(4+5+6)*(4+5+6)]
)?您应该使用轴
关键字参数来指定它应该和的维度。在您的示例中,将函数更改为:
def the_func(x,y):
return np.sum(x, axis=1)*np.sum(y, axis=1)
在示例输入上运行它会得到结果
[36 255]
duh。在我的实际函数中没有考虑数组的新形状。谢谢,不用担心!如果答案解决了您的问题,请将其标记为可接受的解决方案:)是的,等待能够做到这一点vectorize
将标量值从输入数组传递到您的函数。您的输入都是(2,3)(转换为数组时),因此输出也是(2,3)。实际上,函数(1,1)
,函数(2,2)
等等。而且,矢量化
不会加快代码的速度(与直接迭代相比)。是的,在这种情况下,并没有试图加快速度,只是优雅地为循环编写多个,而不是只做一个循环<代码>[vfunc(x,y)代表x,y在zip(a,b)]是的,如果你是对的,我可以把所有东西都压缩。我的实际代码有点复杂,我最终修改了函数以考虑形状,而不是多次调用函数
>>> vfunc([[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]])
array([[ 1, 4, 9],
[16, 25, 36]])
def the_func(x,y):
return np.sum(x, axis=1)*np.sum(y, axis=1)