我是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()};
似乎它必须在double [,]数组中,因为它对于以后的函数是必需的
alglib.lsfitcreatef(x, y, c, diffstep, out state);
有人可以帮我吗? 或者有人可以为非线性拟合推荐一种更简单的方法吗?
提前多多感谢
答案 0 :(得分:1)
以下是将列表中的值复制到数组的简单方法:
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
期望数组具有相同的排名(即维度数)。
答案 1 :(得分:0)
该示例是一个多维数组:http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx
...但它看起来配置得不是很正确。
无论如何,您的列表是一个维度。
因此,等价物是:
List<Double> xz = new List<Double>();
Double[] myDblArray = xz.ToArray();