2D массив - ожидается инициализатор вложенного массива. C#

Я использую пакет MathNet.Numerics для расчета матрицы.

Для объявления и инициализации матрицы ожидаемый код выглядит следующим образом:

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

В моем собственном коде у меня есть три одномерных массива - xPointsSquared, yPoints, one.

Я получаю ошибку - "инициализатор вложенного массива ожидается" при попытке инициализировать матрицу следующим образом,

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

2 ответа

Решение

Я бы предложил вместо этого использовать более подходящую функцию построения, например:

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

Посмотрите Создание Матриц и Векторов в документах для большего количества альтернатив.

2D массив должен быть инициализирован с помощью инициализатора вложенного массива. И это не то же самое с инициализацией зубчатого массива double[][]. Во втором случае вы выполняете инициализацию зубчатого массива, а не инициализацию двумерного массива. Если вы хотите инициализировать ваш 2D-массив с помощью вашего трех одномерного массива, вы должны вставить элемент массива один за другим.

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[,], прежде чем использовать double[,] в качестве входных данных для конструктора класса Matrix.

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);
Другие вопросы по тегам