我有两个向量a=(a1,...,a_n)和B=(b_1,...,B_n),我想构建向量c,使得
c_(k)= a_(1)B_(n-k+1)+ a_(2)B_(n-k+2)+.+ a_(k)B_(n)
例如,对于向量a=[1, 2, 3, 4]
,b=[5, 6, 7, 8]
,我期望得到:c = [1*8, 1*7+2*8, 1*6+2*7+3*8, 1*5+2*6+3*7+4*8] = [8, 23, 44, 70]
有没有一种方法可以只使用numpy,而不使用循环?
循环示例
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
c = []
for i in range(1, len(a) + 1):
c.append(a[:i].dot(b[-i:]))
c = np.array(c) # [ 8 23 44 107]
1条答案
按热度按时间f0brbegy1#
这个操作是
a
和反向b
的卷积。在numpy中,你可以使用np.convolve
来实现。你似乎想要一个特殊的情况,你采取前N个元素,其中N是a
的长度(或b
,因为我假设它们的长度相同)。这是非标准的,所以我只索引前N个元素。通常情况下,您可以使用其中一种卷积模式,例如"full"
(默认),"same"
或"valid"
(这些在文档中有解释)。如果你有一个更大的数据集,基于FFT的卷积方法会更快。因此,根据文档,您将使用
scipy.signal.fftconvolve
。