簡體   English   中英

System.ArgumentException:給定的數組太小

[英]System.ArgumentException : The given array is too small

我試圖在點列表上使用FFT過濾器(每個點都有x和y坐標),我應該得到一個list<Complex>

當測試下面的代碼(在包含12點的列表上)時,出現此錯誤

System.ArgumentException : The given array is too small. It must be at least 14 long. at MathNet.Numerics.IntegralTransforms.Fourier.ForwardReal(Double[] data, Int32 n, FourierOptions options)

我實際上正在使用Math.net MathNet.Numerics.IntegralTransforms.Fourier.ForwardReal MathNet.Numerics.IntegralTransforms.Fourier.ForwardReal(buffer, buffer.Length, FourierOptions.Matlab);

這是我班的代碼

        // inputs is a List of Point(List<Point> inputs)
        var buffer=inputs.Select(p => (p.Y)).ToArray();
        try
        {
            MathNet.Numerics.IntegralTransforms.Fourier.ForwardReal(buffer, buffer.Length, FourierOptions.Matlab);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }

知道如何解決嗎? 謝謝 :)

根據詳細的手冊,緩沖區需要比您的數據長2個項目。

https://numerics.mathdotnet.com/api/MathNet.Numerics.IntegralTransforms/Fourier.htm#ForwardReal

void ForwardReal(Double [] data,int n,FourierOptions選項)

...為了支持這種壓縮頻譜,數據數組需要為N + 2(如果N為偶數)或N + 1(如果N為奇數)長。

當我在github上閱讀代碼時,現在的想法更加清晰了。 這就是我的代碼的更正,

        var inputsCount = inputs.Count;
        var buffer =new double[inputsCount % 2 == 0 ? inputsCount + 2 : inputsCount + 1];
        int j = 0;

        foreach (var point in inputs)
        {
            buffer[j] = point.Y;
            j++;
        }

        try
        {
            MathNet.Numerics.IntegralTransforms.Fourier.ForwardReal(buffer, inputsCount, FourierOptions.Matlab);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM