繁体   English   中英

numpy.vectorize function 签名

[英]numpy.vectorize function signature

我有 2 个 arrays:

>>> a.shape
(9, 3, 11)
>>> b.shape
(9,)

我想计算c[i, j] = f(a[i, j, :], b[i])的等价物,其中f(a0, b0)是一个 function ,它需要 2 个参数, len(a0) == 11len(b0) == 9 这里, irange(9)上迭代, jrange(3)上迭代。

有没有办法使用numpy.vectorize对此进行编码? 还是通过一些巧妙的广播更简单?

我已经尝试了 2 个小时,但我只是不明白如何使它工作......我尝试广播或使用签名但无济于事。

numpy.apply_along_axis是您所需要的。

import numpy as np

a = np.ones( (9,3,11) )
b = np.ones( 9 )

def f(a0, b0):
    return a0[:9]+b0

c = np.apply_along_axis( f, 2, a, b )
print(c)

c的形状是 (9,3)。

最后,我可以让它像这样工作:

>>> f = np.vectorize(f, signature="(k),(1)->()")
>>> print(a.shape)
(9, 3, 11)
>>> print(b.shape)
(9,)
>>> print(f(a, b[:, None, None]).shape)
(9, 3)

这确保f以正确的形状被调用并正确迭代。 坦率地说,从 Numpy 文档中了解为此目的在签名中使用(1)的技巧并不简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM