Nyx*_*nyx 62 python numpy convolution moving-average python-2.7
在计算简单移动平均线时,numpy.convolve
似乎可以完成这项工作.
问题:使用时如何完成计算np.convolve(values, weights, 'valid')
?
当文档提到时convolution product is only given for points where the signals overlap completely
,2个信号指的是什么?
如果任何解释可以包括示例和插图,那将非常有用.
window = 10
weights = np.repeat(1.0, window)/window
smas = np.convolve(values, weights, 'valid')
Run Code Online (Sandbox Code Playgroud)
Sor*_*vux 121
卷积是一种主要用于信号处理的数学运算符.Numpy只是使用这个信号处理命名法来定义它,因此"信号"引用.numpy中的数组是一个信号.两个信号的卷积被定义为第一信号的积分,被反转,扫过("卷入")第二信号并且在重叠矢量的每个位置处相乘(用标量积).第一个信号通常称为内核,特别是当它是图像处理或神经网络中的二维矩阵时,反转变为二维镜像(非转置).使用维基百科上的动画可以更清楚地理解它.
根据上下文,卷积有多个定义.一些在重叠开始时开始卷积,而另一些在重叠仅部分时开始.在numpy的"有效"模式的情况下,重叠被指定为始终完成.它被称为"有效",因为结果中给出的每个值都是在没有数据外推的情况下完成的.
例如,如果数组X的长度为2且数组Y的长度为4,则在"有效"模式下将X卷积到Y上将为您提供长度为3的数组.
第一步,X = [4 3]和Y = [1 1 5 5]:
[3 4] (X is reversed from [4 3] to [3 4], see note)
[1 1 5 5]
= 3 * 1 + 4 * 1 = 7
Run Code Online (Sandbox Code Playgroud)
第二步:
[3 4]
[1 1 5 5]
= 3 * 1 + 4 * 5 = 23
Run Code Online (Sandbox Code Playgroud)
第三步:
[3 4]
[1 1 5 5]
= 3 * 5 + 4 * 5 = 35
Run Code Online (Sandbox Code Playgroud)
模式"有效"的卷积结果将是[7 23 35].
如果重叠被指定为一个单一数据点(如模式"full"中的情况),结果将给出一个长度为5的数组.第一步是:
[3 4]
[1 1 5 5]
= 3 * undefined (extrapolated as 0) + 4 * 1 = 4
Run Code Online (Sandbox Code Playgroud)
等等.存在更多的外推模式.
小智 6
还值得注意的是,内核是“居中”的,因为内核的索引是相对于数组的中心元素获取的。换句话说,对于索引从 0 开始的数组(如在 python 中),函数\nB = np.convolve (A, K)
计算
其中m = (len(K) - 1)//2
(整数除法)。这是一个整数,当为偶数时也是len(K)
如此。
名义上求和是对i
从 -\xe2\x88\x9e 到 \xe2\x88\x9e 的所有值求和,\n其中A
超出范围的值假定等于零。对于内核的值也是如此。对于np.convolution2D
,您必须选择使用模式、边界和填充值选项来指定如何A
处理超出范围的值。
因此,例如,对于np.convolve(A, K)
if\nK = np.array([1, 2, 3])
或K = np.array([1, 2, 3, 0, 0])
归档时间: |
|
查看次数: |
52067 次 |
最近记录: |