Самый быстрый способ получить данные матрицы в формате массива - использовать метод memptr()
. Он возвращает указатель на массив C-стиля, содержащий данные матрицы. Поэтому, если у вас есть Mat<double>
размера n на n, этот метод дает вам указатель на массив из double
длины n * n.
int n=10;
Mat<double> M(n,n,fill::rand);
double* arr = M.memptr();
если вы затем цикл через arr
вы получите элементы в упорядочении столбцов, а mtall указал.
И наоборот, вы можете очень эффективно использовать уже существующий массив данных для инициализации матрицы или даже просто использовать матричный объект в качестве интерфейса для выполнения преобразования линейной алгебры на ваш массив (например, вектор-вектор-матрица). Для этого взгляните на advanced mat constructor.
Это особенно полезно для итеративных методов, таких как методы Lanczos/Arnoldi или Conjugate Gradient, и у вас есть реализация тех, кто работает с массивами C-стиля. Затем вы можете просто привязать эти массивы к объектам arma без копирования для выполнения преобразований.