List<double> to double[,] for ALGLIB

本文关键字:double for ALGLIB gt lt List to | 更新日期: 2023-09-27 18:17:09

我是c#的新手,我想用它来编写一个校准AFM悬臂的软件。因此,我需要将一个非常难看的函数拟合到一些非线性数据的第一个峰值上。我认为对于这个目的,ALGLIB包可能会派上用场,它似乎相对容易应用。在他们主页的例子中,他们使用了x轴数据:

double[,] x = new double[,]{{-1},{-0.8},{-0.6},{-0.4},{-0.2},{0},{0.2},{0.4},{0.6},{0.8},{1.0}};

我在一个列表中有我的x值,并且想要使用它们。如何将它们从列表中取出并放入双精度[,]中?我最后的方法是这样的

List<double> xz = new List<double>();
...
double[,] x = new double[,]{xz.ToArray()};

似乎它必须在双[,]数组中,因为它是稍后函数的强制性

alglib.lsfitcreatef(x, y, c, diffstep, out state);
有谁能帮我一下吗?或者有人能推荐一种更简单的非线性拟合方法吗?

thanks lot in advance

List<double> to double[,] for ALGLIB

下面是将列表中的值复制到数组中的简单方法:

List<double> xz = // something
double[,] x = new double[xz.Count, 1];
for (int i = 0; i < xz.Count; i++)
{
    x[i, 0] = xz[i];
}

我找不到比手工复制更好的方法。ToArray()创建了一个不兼容的类型(double[]), Array.Copy期望数组具有相同的秩(即维数)。

这个例子是一个多维数组:http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx

…但是看起来配置得不太对。

无论如何,你的列表是一维的。

因此,等效的是:
List<Double> xz = new List<Double>();
Double[] myDblArray = xz.ToArray();