【发布时间】:2020-06-25 12:48:13
【问题描述】:
犰狳库为element access提供了3种方式:
- 通过
(); - 通过
[]; - 通过
at();
我注意到使用它们时的性能有所不同。我测试了下面的代码:
size_t n_row = 500, n_col = 500;
{ // ()
wall_clock timer;
mat matrix(n_row, n_col, fill::zeros);
timer.tic();
for (size_t i = 0; i < n_row; i++){
for (size_t j = 0; j < n_col; j++){
matrix(i, j) = i+j;
}
}
std::cout << timer.toc() << std::endl;
}
{ // []
wall_clock timer;
mat matrix(n_row, n_col, fill::zeros);
timer.tic();
for (size_t i = 0; i < n_row; i++){
for (size_t j = 0; j < n_col; j++){
matrix[i, j] = i+j;
}
}
std::cout << timer.toc() << std::endl;
}
{ // .at()
wall_clock timer;
mat matrix(n_row, n_col, fill::zeros);
timer.tic();
for (size_t i = 0; i < n_row; i++){
for (size_t j = 0; j < n_col; j++){
matrix.at(i, j) = i+j;
}
}
std::cout << timer.toc() << std::endl;
}
结果是:
- 通过
()0.0008 秒; - 通过
[]0.0003 秒; - 通过
at()0.0007 秒;
有人可以评论给定的结果吗?
我使用 Windows 10 x64、MSVC 2017、发布模式、Qt 5.14.2
我在config.hpp中设置了#define ARMA_NO_DEBUG
【问题讨论】:
-
犰狳documentation 声明
#define ARMA_NO_DEBUG不是在您的代码中的所有错误都被检测和删除之前是一个好主意。