如何使用犰狳加载 MATLAB 矩阵
how to load matlab matrix with armadillo?
我知道matlab矩阵可以通过某些方式加载到程序中C++而这些方法似乎都没有效率或方便。我看到其他人修改了".mat"文件的标题,然后可以直接将其加载到C++犰狳程序中。
有人知道如何修改头文件吗?
它不仅仅是将matlab".mat"文件保存为ascii格式。加载时间和存储空间大于二进制格式。要存储 2GB 二进制 mat 文件,我至少需要 20GB 以 ASCII 格式存储它。加载 100MB 二进制 mat 文件需要不到 1 秒的时间,加载相同大小的 ASCII 文本数据需要更长的时间。
我不认为将 matlab mat 文件保存为 ASCII 格式并将其加载到犰狳中是一个很好的解决方案。
根据犰狳文档:
file_type可以是以下之一:
...
raw_ascii:
以原始 ASCII 格式存储的数字数据,不带标头。数字用空格分隔。每行中的列数必须相同。多维数据集作为一个切片加载。使用 -ascii 选项保存在 Matlab/Octave 中的数据可以在犰狳中读取,复数除外。复数以标准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
选项将其加载到犰狳中。
例如,在 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");
唯一的问题是你失去了原始矩阵的矩阵尺寸,因为犰狳以矢量化的形式加载它,所以你必须在加载后每只手重新塑造它。
要包含矩阵尺寸,您可以在保存在 matlab 中时模仿犰狳标头,然后在加载时使用 arma::arma_binary
选项。如果您对该选项感兴趣,我也可以告诉您如何操作。
- 为什么用于阈值矩阵元素的 Matlab 逻辑索引操作在性能上优于 mex 实现?
- 将 GNU Octave(或 Matlab)矩阵输出到具有 C 数组语法的文件中
- 从MATLAB到C 特征矩阵操作 - 矢量归一化
- 在带有单元格数组的C 特征矩阵和MATLAB MXARRAY之间传递数据
- 如果输入图像矩阵实际上是复杂类型,MATLAB imresize() 会怎么做?
- 性能:Matlab与C++矩阵矢量乘法
- cuBLAS矩阵的逆速度比MATLAB慢得多
- 如何在使用 CUDA 和 Matlab 时将矩阵作为参数
- 插入Boost UBLAS矩阵MATLAB样式的数据
- 如何将3D矩阵存储在文本文件中,以便将其导入MATLAB
- MEX:如何从C++/C向MATLAB返回矩阵
- 在OpenCV中将.mat文件从MATLAB转换为cv::mat矩阵
- 使用mex将一个大矩阵从Matlab传递到C:Matlab崩溃
- Eigen vs Matlab:并行矩阵乘法
- 在 Matlab 中将以下矩阵代码转换为 C++ 中的特征码时出现问题
- 将数据从OpenCV矩阵发送到Matlab Engine,C++
- 将 Matlab 中的矩阵保存到 bin 文件中,然后用 c++ 读取
- openCV vs matlab矩阵连接
- 如何使用犰狳加载 MATLAB 矩阵
- 导出Matlab矩阵值到OpenGL