Я знаю, что матрица Matlab может быть загружена в программу C++ в некотором смысле, хотя ни один из этих способов не кажется эффективным или удобным. Я видел, как другие модифицировали заголовок файла.mat, затем он может быть непосредственно загружен в программу C++ с помощью armadillo.
Это не просто сохранить файл.lt в Matlab в формате ascii. Время загрузки и объем памяти больше, чем двоичный формат. Чтобы сохранить файл двоичного мата размером 2 ГБ, мне нужно хранить не менее 20 ГБ в формате ASCII. Загрузка файла бинарного файла 100 МБ занимает менее 1 секунды, загрузка текстовых данных ASCII одинакового размера занимает гораздо больше времени.
Я не думаю, что сохранить файл matlab mat в формате ASCII и загрузить его в armadillo - это хорошее решение.
Согласно документации Армадилло:
file_type может быть одним из следующих:
...
raw_ascii:
Числовые данные, хранящиеся в необработанном формате ASCII, без заголовка. Числа разделяются пробелами. Количество столбцов должно быть одинаковым в каждой строке. Кубы загружаются как один фрагмент. Данные, сохраненные в Matlab/Octave с использованием опции -ascii, можно прочитать в Armadillo, за исключением сложных чисел. Сложные числа хранятся в стандартной нотации C++, которая представляет собой кортеж, окруженный скобками: например. (1,23,4,56) указывает 1,24 + 4,56i.
Поэтому вы можете загрузить матрицу Matlab в текстовом формате, содержащуюся в файле MatlabMatrix.mat, используя следующий код:
arma::mat fromMatlab;
fromMatlab.load("MatlabMatrix.mat", arma::raw_ascii);
Кроме того, связанный с этим вопрос можно найти здесь.
Вы можете экспортировать свои данные в Matlab в двоичном формате низкого уровня, а затем загрузить его в arma::raw_binary
параметра arma::raw_binary
.
например, в MATLAB:
m=10;
A = randn(m,m);
name = 'test.bin'
[F,err] = fopen(name,'w');
if F<0,error(err);end
fwrite(F,A,'double');
fclose(F);
груз с броненосцемей:
arma::mat A;
std::string name = "test.bin";
A.load(name,arma::raw_binary);
A.print("A");
Единственное, что вы теряете матричные размеры исходной матрицы, так как armadillo загружает ее в векторизованной форме, поэтому вам нужно изменить ее на каждую руку после загрузки.
Чтобы включить размеры матрицы, вы можете имитировать заголовок arma::arma_binary
при сохранении в matlab, а затем при загрузке использовать параметр arma::arma_binary
. Если вас интересует этот параметр, я также могу рассказать вам, как это сделать.