卷积和相关

卷积和相关是多种数据列表运算的核心. 它们被用于信号和图像处理,统计数据分析,偏微分方程的近似,以及数列和幂级数的运算等领域.

卷积和相关的基本思想是将列表依次与数据列表的子列表进行组合. 核 与列表 的卷积的一般形式为 ,而相关的一般形式为 .

ListConvolve[kernel,list]构造 kernellist 的卷积
ListCorrelate[kernel,list]构造 kernellist 的相关

列表的卷积和相关.

这里构造核 与数据列表的卷积.
In[1]:=
Click for copyable input
Out[1]=
这里构造相关.
In[2]:=
Click for copyable input
Out[2]=
此情形中颠倒核元素的次序得出与卷积 ListConvolve 相同的结果.
In[3]:=
Click for copyable input
Out[3]=
这里构造数据的依次相减.
In[4]:=
Click for copyable input
Out[4]=

在与一个核结合构造子列表中,在数据列表的末尾总有一个事情要做. 缺省时,ListConvolveListCorrelate 绝不会构造延伸数据列表的末端的子列表. 这意味着得到的输出通常比原数据列表短.

此例中,输入列表长度是6,而输出的长度是4.
In[5]:=
Click for copyable input
Out[5]=

实际上,人们常常希望得到与原数据列表一样长的输出. 要做到这一点,需要包含延伸原数据列表一端或两端的子列表. 构造这些子列表所需的额外元素必须用某种补丁来填充. 缺省时,Wolfram 语言取原列表的拷贝作为补丁. 这样将列表周期地进行处理.

ListCorrelate[kernel,list]不允许在两边延伸(结果比 list 短)
ListCorrelate[kernel,list,1]允许在右边延伸(结果与 list 的长度相同)
ListCorrelate[kernel,list,-1]允许在左边延伸(结果与 list 的长度相同)
ListCorrelate[kernel,list,{-1,1}]允许在两边延伸(结果比 list 长)
ListCorrelate[kernel,list,{kL,kR}]允许在左边和右边进行特定的延伸

控制数据列表末端的处理方式.

缺省时不包含延伸.
In[6]:=
Click for copyable input
Out[6]=
此处最后一个元素的最后一项来自原列表的开头.
In[7]:=
Click for copyable input
Out[7]=
此处第一个元素的第一项和最后一个元素的最后一项都包含重叠.
In[8]:=
Click for copyable input
Out[8]=

一般情况下,ListCorrelate[kernel,list,{kL,kR}] 被设置为结果的第一个元素中包含 list 的第一个元素与 kernel 在位置 处的元素的乘积,结果的最后一个元素中包含 list 的最后一个元素与 kernel 在位置 处的元素的乘积. 缺省情形下,不允许在任何一端有延伸,因此对应于 ListCorrelate[kernel,list,{1,-1}].

对长度为3的核, 总是使结果的第一个和最后一个元素相同.
In[9]:=
Click for copyable input
Out[9]=

对于多种数据,不假定数据是周期的,而用某个固定元素,如零或某个元素序列在列表的每端进行补充常常是很方便的.

ListCorrelate[kernel,list,klist,p]用元素 p 补充
ListCorrelate[kernel,list,klist,{p1,p2,}]
的循环进行补充
ListCorrelate[kernel,list,klist,list]用原数据的循环进行补充

数据列表补充的控制.

这里用元素 补充.
In[10]:=
Click for copyable input
Out[10]=
一个常见的情况是用零补充.
In[11]:=
Click for copyable input
Out[11]=
当使用 表明补充操作时,列表 用在 下对齐的 覆盖 .
In[12]:=
Click for copyable input
Out[12]=

选择不同的核能使 ListConvolveListCorrelate 用于不同类型的运算.

这里求数据的移动平均值.
In[13]:=
Click for copyable input
Out[13]=
这是一个高斯核.
In[14]:=
Click for copyable input
这里生成一些数据.
In[15]:=
Click for copyable input
这是该数据的图形.
In[16]:=
Click for copyable input
Out[16]=
求高斯核与该数据的卷积.
In[17]:=
Click for copyable input
结果是该数据得到了磨光.
In[18]:=
Click for copyable input
Out[18]=

可以使用 ListConvolveListCorrelate 处理符号和数值数据.

这里构造两个符号列表的卷积.
In[19]:=
Click for copyable input
Out[19]=
其结果精确地对应于这两个多项式乘积展开形式中的系数.
In[20]:=
Click for copyable input
Out[20]=

ListConvolveListCorrelate 对任意维数的数据都有效.

这是从一个文件中导入图像数据.
In[21]:=
Click for copyable input
这是该图像.
In[22]:=
Click for copyable input
Out[22]=
这里求图像数据与二维核的卷积.
In[23]:=
Click for copyable input
这里显示了对应于数据卷积德图像.
In[24]:=
Click for copyable input
Out[24]=