我目前正在Visual Studio环境中使用BeagleBone Black进行交叉编译,使用Armadillo将MATLAB代码转换为C ++。
这是一个信号处理项目,所以我需要一种方法来读写二进制数据文件,特别是.mat文件。值得庆幸的是,armadillo文档说您可以使用.load()
将.mat文件直接加载到矩阵中我一开始尝试过,但似乎它没有正确读取文件,也没有读取所有条目。我的参考文件是一个2000x6矩阵,创建的犰狳矩阵是5298x1。我知道如果没有犰狳模仿标题,它将被转换为列向量,我将需要使用.reshape()重新整形它,但它只是没有收到所有条目,并且通过检查,它所做的条目读错了。
我不确定问题是什么。我已将数据引用.mat文件放在BBB上的远程项目的Debug文件夹中,其中创建了.out编译文件。还有其他方法可以整合它吗?
此外,欢迎帮助模仿犰狳标题或其他建议。 如果您需要什么,请告诉我。
这是我正在使用的测试程序:
#include <iostream>
#include <armadillo>
using namespace std;
using namespace arma;
int main()
{
mat data_ref;
data_ref.load("Epoxy_6A_Healthy_Output_200kHz_Act1_001.mat");
cout << "For Data_ref, there are " << data_ref.n_cols << " columns and " << data_ref.n_rows << " rows.\n";
cout << "First item: " << data_ref(0) << "\n6th item: " << data_ref(6) << "\n2000th item: " << data_ref(2000);
data_ref.reshape(2000, 6);
cout << "For Data_ref, there are " << data_ref.n_cols << " columns and " << data_ref.n_rows << " rows.\n";
cout << "First item: " << data_ref(0,0) << "\nLast Item: " << data_ref(1999,5);
cout << "\nDone";
return 0;
}
.mat文件中的第一个元素是0.0,最后一个元素是0.0014。 这是输出。
For Data_ref, there are 1 columns and 5298 rows.
First item: 8.48749e-53
th item: 9.80727e+256
th item: -2.4474e+238For Data_ref, there are 6 columns and 2000 rows.
First item: 8.48749e-53
(gdb) 1028-var-list-children --simple-values "var4.public" 0 1000
(gdb) 1030-var-list-children --simple-values "var4.arma::Base<double,
arma::Mat<double> >" 0 1000
Last Item: 0
Done=thread-exited,id="1",group-id="i1"
The program '' has exited with code 0 (0x0).
由于
答案 0 :(得分:1)
Armadillo不支持Matlab的.mat格式。在文档中,它们引用了Armadillo moment.locale('de') // switch between en and de -- english and german
var a = moment();
var b = moment(a).add(31, 'hours');
// Results in days
console.log(b.diff(a, 'days'));
console.log(b.diff(a, 'days', true));
二进制格式。但是,您可以使用<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
二进制格式将数据保存在Matlab中并将其导入Armadillo,但是您必须下载hdf5 lib并重新配置Armadillo。请参阅文档中的mat
部分。