我已经将 MATLAB 代码转换为 C++ 以加快速度,使用 Armadillo 库处理 C++ 中的矩阵运算,但令人惊讶的是它比 MATLAB 代码慢 10 倍!
所以我测试了犰狳库,看看它是否是原因。下面的代码是一个简单的测试代码,它初始化两个矩阵,将它们相加并将结果保存到一个新矩阵中。一段代码使用了 Armadillo 库,而另一段则没有。使用犰狳的部分太慢了(注意经过的时间)。
它真的会减慢执行速度(尽管它应该加快执行速度)还是我错过了什么?
#include<iostream>
#include<math.h>
#include<chrono>
#include<armadillo>
#include<time.h>
#include<conio.h>
using namespace std;
using namespace arma;
int main()
{
srand((unsigned int)time(NULL));
auto start = std::chrono::high_resolution_clock::now();
double a[100][100];
double b[100][100];
double c[100][100];
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
a[i][j] = rand() % 10;
b[i][j] = rand() % 10;
c[i][j] = a[i][j] + b[i][j];
}
}
auto finish = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed = finish - start;
std::cout << "Elapsed time: " << elapsed.count() << " s\n";
auto start1 = std::chrono::high_resolution_clock::now();
mat a1= randi<mat>(100, 100, distr_param(1, 10));
mat b1= randi<mat>(100, 100, distr_param(1, 10));
mat c1=zeros(100,100);
c1 = a1 + b1;
auto finish1 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed1 = finish1 - start1;
std::cout << "Elapsed time: " << elapsed1.count() << " s\n";
return 0;
}
}
这是我得到的答案:
Elapsed time: 0.00217959 s
Elapsed time: 0.00946147 s
如您所见,犰狳明显慢得多!不使用犰狳图书馆会更好吗?