有没有办法在每两个元素上应用一个函数?
Is there a way to apply a function on every two elemens?
例如,如果我有两个数组:
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)
但我无法使用卷积函数应用自定义函数
我看起来好像你在找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))
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 回答
例如,如果我有两个数组:
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)
但我无法使用卷积函数应用自定义函数
我看起来好像你在找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))
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 回答