循环卷积总结

Posted newera

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环卷积总结相关的知识,希望对你有一定的参考价值。

一般的线性卷积:

$f[i]=sum_{j=0}^i a[j]*b[i-j]$

如果将$b$数组循环复制得到$b_N$就能得到周期卷积:

$f[i]=sum_{j=0}^{N-1} a[j]*b_N[i-j]$

而一般比较常见的循环卷积其实就是周期卷积的主值序列($[0,N-1]$项):

$f[i]=sum_{j=0}^{N-1} a[j]*(b[i-j])_N$,其中下标$N$表示其主值序列限定在$[0,N-1]$

计算循环卷积时暴力是$n^2$,先求出两序列的线性卷积再全累加到$[0,N-1]$上就是$nlogn$

 

循环卷积的常见运用:

1、对循环矩阵作乘法时

$[n*n矩阵]*[n行列向量]=[矩阵第一列]igoplus [n行列向量]$,其中$igoplus$表示循环卷积

如果将矩阵第一行循环复制,发现每次就相当于将列向量向上移动一格,是循环卷积的形式

之所以是矩阵第一列是因为想要矩阵第一行$[c_0,c_1,c_2,c_3]$与$[a_0,a_1,a_2,a_3]$的內积是卷积中第一项,

那么就要将$c$转为$[c_0,c_3,c_2,c_1]$(也就是第一列),这样才能保证$f[0]=sum_{j=0}^{N-1} a[j]*(c[0-j])_N$成立!

 

2、计算下标相加取模的贡献式时

对于$a[i]*b[j]->f[(i+j)modN]$这样的贡献式其实$f$就是$a$和$b$的循环卷积

如果用于$dp$并多次转移时,可以使用快速幂优化,原理和矩阵快速幂相同

 

其实上面两种运用是一个意思,可以相互转化,最后都使用循环卷积+快速幂解决

以上是关于循环卷积总结的主要内容,如果未能解决你的问题,请参考以下文章

卷积神经网络:总结

请阐述线性卷积,周期卷积,循环卷积有啥不同

多维时序 | MATLAB实现GTO-CNN-GRU人工大猩猩部队优化卷积门控循环单元多变量多步时间序列预测

循环卷积python代码

循环卷积python代码

将C语言循环部分优化,改成线性汇编或者C的都行!~~高手求救