たたみ込みと相関
たたみ込みと相関はデータリストに関する多くの演算の中核をなす.信号および画像処理,統計データ解析,偏微分方程式の近似や,数値列やベキ級数に対する演算等の分野で使用される.
たたみ込みと相関の基本的な考え方は核のリストをデータリストのサブリストと連続的に結合することである.核
とリスト
とのたたみ込みの一般的な形式は
で,相関の一般的な形式は
である.
リストのたたみ込みと相関
核

とデータリストとのたたみ込みを形成する.
| Out[1]= |  |
| Out[2]= |  |
| Out[3]= |  |
| Out[4]= |  |
核と結合させるサブリストを構成する際,データリストの最後をどう扱うかが常に問題になる.デフォルトではListConvolveおよびListCorrelateはデータリストの最後から「はみ出す」サブリストは作成しない.これは得られる結果が通常はもとのデータリストより短いことを意味している.
長さ6の入力リストに関して,この場合出力の長さは4である.
| Out[5]= |  |
実際上,もとのデータリストと同じ長さの出力を得たい場合がしばしばある.このためにはデータリストの片側または両側がはみ出すようなサブリストが必要となる.こういったサブリストの形成に必要な追加要素は,ある種の「パディング」で充填される必要がある.デフォルトでは Mathematica は,もとのリストの複製を作り,パディングを与え,リストを循環的に扱うようになっている.
| 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}] | 左側および右側に特別なはみ出しを許す |
データリストの両端での処理を制御する
| Out[6]= |  |
最後の要素の最後の項がリストの最初から取られている.
| Out[7]= |  |
最初の要素の第1項と最後の要素の最終項はともにラップされている.
| Out[8]= |  |
一般的な場合,ListCorrelate[kernel, list, {kL, kR}]は,結果の最初の要素では list の最初の要素が kernel の位置
にある要素と掛けられ,結果の最後の要素では list の最後の要素が kernel の位置
にある要素と掛けられるようになっている.したがって,はみ出しがどちら側にも許されないとされるデフォルトの場合はListCorrelate[kernel, list, {1, -1}]に相当する.
長さ3の核に関して,

で揃えると,常に結果の最初および最後の要素を同じにする.
| Out[9]= |  |
多くの種類のデータでは,データは循環せずに,ある固定した要素,例えば0やある要素列でどちらかの最後に充填されると仮定すると便利である.
| ListCorrelate[kernel,list,klist,p] | 要素 p で充填する |
| ListCorrelate[kernel,list,klist,{p1,p2,...}] |
| の循環で充填 |
| ListCorrelate[kernel,list,klist,list] | もとのデータの循環で充填 |
データリストのパディングを制御する
要素

で充填する.
| Out[10]= |  |
| Out[11]= |  |
充填が

で示される場合,リスト

は

の下に

が整列した

でオーバーレイされる.
| Out[12]= |  |
異なる核を選択することでListConvolveおよびListCorrelateを異なる種類の計算に使用できる.
| Out[13]= |  |
| Out[16]= |  |
| Out[18]= |  |
ListConvolveおよびListCorrelateを用いて,数値と同様に記号を扱うことができる.
| Out[19]= |  |
| Out[20]= |  |
ListConvolveおよびListCorrelateは任意次元のデータに使用できる.
| Out[22]= |  |
| Out[24]= |  |