Матрица из math.net в массив

У меня к тебе вопрос. Я создал матрицу на С#, выполняя некоторые математические операции с помощью Math.Net. Теперь я хотел бы преобразовать матрицу в список или разделить ее столбцы на несколько массивов. Моя цель — передать эту матрицу программному обеспечению, которое не читает матрицы из Math.Net, а только читает списки, массивы и т. д. из кодов C#.

Благодарю вас!

РЕДАКТИРОВАТЬ: Вот мой код:

Matrix<double>[] matrixC = new Matrix<double>[ins];
            for (int i = 0; i < ins; i++)
            {
                matrixC[i] = Matrix<double>.Build.DenseOfColumns(CjTR[i]);
            }

matrixC — это матрица матриц, созданная путем сборки некоторых списков. Вот моя матрица C.

матрицаC[0]

введите здесь описание изображения

matrixC1

введите здесь описание изображения

Я хотел бы знать, можно ли разделить каждый столбец на массивы или список. Больше не матрица Math.Net.


person Roberto Ruggeri    schedule 04.08.2019    source источник
comment
Предоставьте ссылку на документацию для матричного класса Math.Net, экземпляр которого у вас есть. Мы не можем угадать, какой у вас.   -  person Ben Voigt    schedule 04.08.2019
comment
Можете ли вы уточнить, почему ваш код не работает? Чего вы ожидали и что произошло на самом деле? Если вы получили исключение/ошибку, опубликуйте строку, в которой она произошла, и сведения об исключении/ошибке, которые можно сделать с помощью минимально воспроизводимого пример. Пожалуйста, отредактируйте свой вопрос, чтобы добавить в него эти данные, иначе мы не сможем помочь.   -  person Patrick Artner    schedule 04.08.2019


Ответы (1)


Стандартная 2d-матрица (или, по крайней мере, ее данные) — не что иное, как обычная двухмерный массив или массив массивов.

Оба эти представления могут быть созданы стандартными методами Math.Net в классе Matrix:

var matrix = MathNet.Numerics.LinearAlgebra.Matrix<double>.Build.Random(3, 4);
var matrixAs2DArray = matrix.ToArray();
var matrixAsJaggedArrayPerColumn = matrix.ToColumnArrays();
var matrixAsJaggedArrayPerRow = matrix.ToRowArrays();

Если вам нужно использовать списки/IList вместо массивов, это можно сделать с помощью преобразования System.Array для списка

Если вы хотите полностью избежать классов Math.Net, вам просто нужно создать такие массивы вручную.

P.S.: В некоторых случаях может иметь смысл использовать IDictionary<(int row,int column), TValue> как способ представления (особенно разреженной) матрицы, но это немного другой вопрос.

person Eugene Podskal    schedule 04.08.2019