有没有一种方法可以在每两个元素上应用一个功能?

时间:2020-01-16 11:54:36

标签: python numpy convolution

例如,如果我有两个数组:

a = np.array([1,2,3,4,5,6,7])
b = np.array([1, 2])

我想得到以下结果:

c = np.array([a[0]*b[0] - a[1]*b[1],a[0]*b[1] - a[1]*b[2], so on, a[0]*b[n-2] - a[1]*b[n-1]])

我对类似numpy的卷积方法感兴趣,该方法可以在两个数组上应用自定义函数。 我尝试过卷积:

np.convolve(a, b)

但是我无法使用卷积函数应用自定义函数

2 个答案:

答案 0 :(得分:1)

convolve暗示着总和,但您可以通过将第二项设置为负数来使之减去:

b_neg = b.copy()
np.negative.at(b_neg, 1)
# or just b_neg = np.array([1, -2])
out = np.convolve(a, b_neg, node = 'valid')

也就是说,如果您只想要自定义功能,则需要@mrks回答

答案 1 :(得分:0)

我似乎好像在寻找scipy.ndimage.generic_filter。您找到文档here

示例:

import functools
from scipy.ndimage import generic_filter


def fun(input_chunk, coeffs):
    ... # calculate result
    return result

c = generic_filter(a, functools.partial(fun, coeffs=b), size=len(b))