r - R 和 Scala Breeze 之间傅里叶逆变换的差异

标签 r scala scala-breeze

我正在尝试将 R 代码转换为 scala,当我执行傅里叶逆变换时,我注意到 Breeze 和 R 之间存在差异。 (R 中的 fft;微风中的逆傅里叶变换)。

在斯卡拉微风中

val vec = new DenseVector(Array(1.0,2.0,3.0,4.0))
val res = inverseFourierTransform(vec)

// res = ( 2.5 ; -0.5 - 0.5i ; -0.5 ; -0.5 + 0.5i )

在 R 中

vec <- c(1,2,3,4)
res <- fft(vec, inverse = TRUE)

# res = ( 10 ; -2 - 2i ; -2 ; -2 + 2i ) 

我们可以观察到两个结果之间存在 4 倍的差异

她从哪里来?

最佳答案

根据fft的帮助文件,倒数应计算为:

fft(x, inverse = TRUE)/length(x)

所以在你的情况下:

vec <- c(1,2,3,4)
res <- fft(vec, inverse = TRUE)/length(vec)
res
# [1]  2.5+0.0i -0.5-0.5i -0.5+0.0i -0.5+0.5i

或者使用pracma包:

pracma::ifft(vec)
# [1]  2.5+0.0i -0.5-0.5i -0.5+0.0i -0.5+0.5i

ifft 帮助页面中的注释指出它几乎是 R 的 fft(x, inverse=TRUE) 的别名,但除以 length(x)

关于r - R 和 Scala Breeze 之间傅里叶逆变换的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35358832/

相关文章:

r - 从日期对象中提取一年中的最后一个日期

scala - 如何避免使用错误数据版本的错误?

scala - 以编程方式从 Storm Bolt 杀死拓扑时出现编译错误 : object and package with same name

scala - 不同集合类型的性能和使用比较

scala - 通用微风向量法

java - 斯卡拉微风 : Solution to a complex system of linear equations

scala - 在聚合 monad 上实现 flatMap

r - 为什么“向量化”这个简单的R循环会得到不同的结果?

r - 在R中,如何按data.table中的特定值对列进行排序?

css - 如何在 R 中使用 render.3dmovie 函数的 vertex.css.class 选项