たたみ込みと相関

たたみ込みと相関はデータリストに関する多くの演算の中核をなす.信号および画像処理,統計データ解析,偏微分方程式の近似や,数値列やベキ級数に対する演算等の分野で使用される.

たたみ込みと相関の基本的な考え方は核のリストをデータリストのサブリストと連続的に結合することである.核 とリスト とのたたみ込みの一般的な形式は で,相関の一般的な形式は である.

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]=

核と結合させるサブリストを構成する際,データリストの最後をどう扱うかが常に問題になる.デフォルトではListConvolveおよびListCorrelateはデータリストの最後から「はみ出す」サブリストは作成しない.これは得られる結果が通常はもとのデータリストより短いことを意味している.

長さ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]=
最初の要素の第1項と最後の要素の最終項はともにラップされている.
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]=

多くの種類のデータでは,データは循環せずに,ある固定した要素,例えば0やある要素列でどちらかの最後に充填されると仮定すると便利である.

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]=

異なる核を選択することでListConvolveおよびListCorrelateを異なる種類の計算に使用できる.

データの移動平均を見付ける.
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]=

ListConvolveおよびListCorrelateを用いて,数値と同様に記号を扱うことができる.

要素が記号の2つのリストのたたみ込みを形成する.
In[19]:=
Click for copyable input
Out[19]=
結果は多項式の積を展開した係数と合致する.
In[20]:=
Click for copyable input
Out[20]=

ListConvolveおよびListCorrelateは任意次元のデータに使用できる.

ファイルから画像データをインポートする.
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]=