為什麼R對卷積有不同的定義?
我發現 R 中的捲積工作方式與 Python 不同。在 Python 中,它將翻轉輸入並運行卷積。
在 R 文檔中,它說
請注意,兩個序列 x 和 y 的捲積的通常定義由 convolve(x, rev(y), type = “o”) 給出。
R的不同方法背後有什麼原因嗎?統計學界的人使用卷積的方式與信號處理界的人不同嗎?
R中的一個例子:
x = c(c(1,2,3,4),rep(0,4)) y = c(c(5,6,7,8),rep(0,4)) convolve(x,y) # will return 70 56 39 20 0 8 23 44
但是在python中
x = np.hstack([np.array([1,2,3,4]), np.zeros(4)]) y = np.hstack([np.array([5,6,7,8]), np.zeros(4)]) np.convolve(x, y) # will return 5., 16., 34., 60., 61., 52., 32.
與傅里葉變換的關係
R中的
convolve
函數使用傅里葉變換來計算卷積(這是差異的潛在來源,雖然我不確定,也不知道細節)。$$ x * y = \mathcal{F}^{-1}{\mathcal{F}{x} \cdot \mathcal{F}{y}} $$
但更具體地說,它使用複共軛,這就是操作將變量向後翻轉的方式。
x = c(c(1,2,3,4),rep(0,4)) y = c(c(5,6,7,8),rep(0,4)) zx = fft(c(x)) zy = fft(c(y)) round(Re(fft(zx*Conj(zy), inverse = TRUE))/8) round(Re(fft(zx*zy, inverse = TRUE))/8)
哪個返回
[1] 70 56 39 20 0 8 23 44 [1] 5 16 34 60 61 52 32 0
我不確定為什麼要使用共軛。這種共軛運算與卷積有關,根據
$$ \mathcal{F}{x(t) * y^(-t)} = \mathcal{F}{x(t)}\cdot\left(\mathcal{F}{y(t)}\right)^ $$
而如果 $ y $ 那麼是真的 $ y = y^* $ . 它還與互相關有點相關。在這種情況下
$$ \mathcal{F}{x(t) * y(-t)} = \mathcal{F}{x(t)}\cdot \left(\mathcal{F}{y(t)}\right)^* $$
請注意,R 的
convolve
函數使用conj
默認為 true 的參數對此進行調節,並將其設置為 false 會給出“正常”卷積。convolve(x,y,conj=FALSE)
間接地,問題可以被視為:“為什麼 R
convolve
使用conj = TRUE
作為默認選項?”差異的潛在(歷史)原因
為什麼卷積的標準 R 函數以相反的方式進行,或者這在歷史上是如何形成的,我不知道。但可能起源可能源於David R. Brillinger (1981)所著的《*時間序列:數據分析和理論》一書,該書在 R 文檔中被引用。*在書中,卷積發生如下:
假設值 $ X(t) $ 和 $ Y(t) $ , $ t=0,\dots,T-1 $ , 可用。我們有時需要卷積$$ \sum_{0\leq {{t}\atop{t+u}} \leq T-1} X(t+u)Y(t) \quad u = 0, \pm 1, \dots \quad (3.6.1) $$
術語卷積在更一般的意義上使用,稍後在文本中它們指的是這種卷積的特定情況
可能需要卷積(3.6.1)的一種情況是估計矩函數 $ m_{12}(u) = E[X_1(t+u)X_2(t)] $ …
同樣在使用快速傅里葉變換算法的早期描述(出現在布里林格的參考)中,他們是否在更廣泛的意義上使用“卷積”。在快速傅立葉變換:為了樂趣和利潤AFIPS ‘66(秋季):1966 年 11 月 7 日至 10 日秋季聯合計算機會議論文集,紳士和桑德寫道
… 迄今為止,快速傅里葉變換最重要的用途與表 I 的捲積定理有關。數值卷積的一些用途如下:
自協方差和交叉協方差: …
…
… Sande 的捲積定理的第一個主要用途是計算自協方差…
因此,似乎至少在某些圈子中,卷積具有更普遍的含義,並且可能 R 函數的作者發現交叉協方差最有用,可以作為標準(提到它是主要用途)。
傅里葉變換也(已經)出現了約定的差異
正如 whuber 在評論中指出的那樣,可以從中得出卷積的傅立葉變換不是唯一定義的。有幾個約定 $ a $ 和 $ b $ 在下面定義的傅里葉變換和逆傅里葉變換公式中:
$$ \begin{array}{} \mathcal{F}(x) = \sqrt{\frac{|b|}{(2\pi)^{1-a}}} \int_{-\infty}^{\infty} f(t) e^{ibxt} \text{d}t \ f(t) = \sqrt{\frac{|b|}{(2\pi)^{1+a}}} \int_{-\infty}^{\infty} \mathcal{F}(x) e^{-ibxt} \text{d}x \end{array} $$
並且不同的字段使用不同的參數 $ a $ 和 $ b $ . 縮放參數 $ a $ 與“卷積”操作關係不大,但方向/符號 $ b $ 可能被視為相關。
就個人而言,我仍然想知道這種與傅立葉變換(及其模棱兩可的約定)的關係是否是 R 函數不同的原因。
我們可以使用傅里葉變換來計算卷積,但這應該是卷積約定多樣性的原因嗎?
(注意:在傅里葉變換的情況下,根據領域的不同,採用不同的約定可能會很有用。因為特定函數的變換,根據領域或多或少相關,可能有一些簡單的形式,也可能不取決於慣例。)