0

我正在尝试使用 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 = ()

任何想法为什么?

4

1 回答 1

1

我认为该Fourier.BluesteinForward方法将结果存储在输入数组中(通过覆盖原来存在的任何内容)。

如果在运行转换后不需要输入,则可以使用x并读取结果(这会节省一些内存复制,这就是 Math.NET 默认执行此操作的原因)。否则,您可以克隆数组并将其包装在更具功能性的代码中,如下所示:

let bluesteinForward input = 
  let output = Array.copy input
  MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward
    (output, FourierOptions.Default)
  output
于 2015-03-29T15:22:57.000 回答