我正在尝试使用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 = ()
任何想法为什么?
谢谢!
答案 0 :(得分:1)
我认为Fourier.BluesteinForward
方法将结果存储在输入数组中(通过覆盖最初的内容)。
如果在运行转换后不需要输入,则可以使用x
并读取结果(这可以节省一些内存复制,这就是Math.NET默认执行此操作的原因)。否则,您可以克隆数组并将其包装在更实用的样式代码中,如下所示:
let bluesteinForward input =
let output = Array.copy input
MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward
(output, FourierOptions.Default)
output