System.ArgumentException : 给定的数组太小
System.ArgumentException : The given array is too small
我正在尝试对点列表(每个点都有 x 和 y 坐标)使用 FFT 滤波器,我应该得到 return a 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(buffer, buffer.Length, FourierOptions.Matlab);
这是我的 class 的代码
// 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 options)
... The data array needs to be N+2 (if N is even) or N+1 (if N is odd) long in order to support such a packed spectrum.
当我阅读 code
在 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;
}
我正在尝试对点列表(每个点都有 x 和 y 坐标)使用 FFT 滤波器,我应该得到 return a 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(buffer, buffer.Length, FourierOptions.Matlab);
这是我的 class 的代码
// 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 options)
... The data array needs to be N+2 (if N is even) or N+1 (if N is odd) long in order to support such a packed spectrum.
当我阅读 code 在 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;
}