Почему этот код R не дает тот же результат? (Свертка против БПФ) - PullRequest
2 голосов
/ 13 февраля 2020

Почему это не дает тот же результат?

x <- runif(10, 0, 1)
y <- runif(10, 0, 1)
convolve(x,y)

f <- fft(fft(x)*fft(y), inverse = TRUE)
f/length(f)  ##not the same as convolve(x,y)....

Если это не то, что делает функция convolve, то что еще?

1 Ответ

3 голосов
/ 13 февраля 2020

Они не эквивалентны, потому что convolve имеет аргумент по умолчанию conj = TRUE, а fft возвращает вектор типа complex. Если мы изменим это, результаты действительно будут такими же:

all.equal(Re(f) / length(f), convolve(x, y, conj = FALSE))
# TRUE
...