R

為什麼R對卷積有不同的定義?

  • May 7, 2020

我發現 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)

間接地,問題可以被視為:“為什麼 Rconvolve使用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 函數不同的原因。

我們可以使用傅里葉變換來計算卷積,但這應該是卷積約定多樣性的原因嗎?

(注意:在傅里葉變換的情況下,根據領域的不同,採用不同的約定可能會很有用。因為特定函數的變換,根據領域或多或少相關,可能有一些簡單的形式,也可能不取決於慣例。)

引用自:https://stats.stackexchange.com/questions/465012

comments powered by Disqus