1

我使用 MathNet.Numerics 包进行矩阵计算。

对于矩阵声明和初始化,预期的代码如下:

Matrix<double> A = DenseMatrix.OfArray(new double[,] {
        {1,1,1,1},
        {1,2,3,4},
        {4,3,2,1}});

在我自己的代码中,我有三个一维数组——xPointsSquared、yPoints、一个。

尝试以以下方式初始化矩阵时出现错误-“需要嵌套数组初始化程序”,

Matrix<double> A = DenseMatrix.OfArray(new double[,] {
        xPointsSquared,
        yPoints,
        one});
4

2 回答 2

1

二维数组必须使用嵌套数组初始化器进行初始化。而且初始化锯齿数组double[][]也不一样。您在第二种情况下所做的是初始化锯齿状数组,而不是初始化二维数组。如果要通过三个一维数组来初始化二维数组,则必须将数组元素一一插入。

Matrix<double> A = DenseMatrix.OfArray(new double[,] {
    { xPointsSquared[0], xPointsSquared[1], xPointsSquared[2], xPointsSquared[3] },

    {yPoints[0], yPoints[1], yPoints[2], yPoints[3],},
    {one[0],one[1],one[2],one[3]}});

我对您的情况的建议是,在使用 double[,] 作为 Matrix 类构造函数的输入之前,先进行 for 循环将元素插入到 double[,] 中。

double[,] mat = new double[3,3600];
for(int i = 0; i < 3600;++i{
    mat[0,i] = xPointsSquared[i];
    mat[1,i] = yPoints[i];
    mat[2,i] = one[i];
}

Matrix<double> A = DenseMatrix.OfArray(mat);
于 2016-04-23T03:23:38.733 回答
1

我建议改用更合适的构造函数,例如:

Matrix<double> A = CreateMatrix.DenseOfRowArrays(xPointsSquared, yPoints, one);

有关更多替代方案,请参阅文档中的创建矩阵和向量

于 2016-04-23T04:07:37.947 回答