在 F# 中使用 mathdotnet 进行傅立叶变换
Fourier transformation with mathdotnet in F#
我正在尝试使用 FFT 算法的 Math.NET 数字实现,但我一定是做错了什么,因为输出总是单位
设置如下:
open MathNet.Numerics
open MathNet.Numerics.Statistics
open MathNet.Numerics.IntegralTransforms
let rnd = new Random()
let rnddata = Array.init 100 (fun u -> rnd.NextDouble())
let x = rnddata |> Array.Parallel.map (fun d -> MathNet.Numerics.complex.Create(d, 0.0) )
然后当我 运行 这个:
let tt = MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward(x, FourierOptions.Default)
我收到下面的空输出?
val tt : unit = ()
知道为什么吗?
我认为 Fourier.BluesteinForward
方法将结果存储在输入数组中(通过覆盖原来存在的内容)。
如果在 运行 转换后不需要输入,您可以只使用 x
并读取结果(这节省了一些内存复制,这就是为什么 Math.NET默认情况下)。否则,您可以克隆数组并将其包装在更实用的样式代码中,如下所示:
let bluesteinForward input =
let output = Array.copy input
MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward
(output, FourierOptions.Default)
output
我正在尝试使用 FFT 算法的 Math.NET 数字实现,但我一定是做错了什么,因为输出总是单位
设置如下:
open MathNet.Numerics
open MathNet.Numerics.Statistics
open MathNet.Numerics.IntegralTransforms
let rnd = new Random()
let rnddata = Array.init 100 (fun u -> rnd.NextDouble())
let x = rnddata |> Array.Parallel.map (fun d -> MathNet.Numerics.complex.Create(d, 0.0) )
然后当我 运行 这个:
let tt = MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward(x, FourierOptions.Default)
我收到下面的空输出?
val tt : unit = ()
知道为什么吗?
我认为 Fourier.BluesteinForward
方法将结果存储在输入数组中(通过覆盖原来存在的内容)。
如果在 运行 转换后不需要输入,您可以只使用 x
并读取结果(这节省了一些内存复制,这就是为什么 Math.NET默认情况下)。否则,您可以克隆数组并将其包装在更实用的样式代码中,如下所示:
let bluesteinForward input =
let output = Array.copy input
MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward
(output, FourierOptions.Default)
output