我是新手__CODE__
,我正在努力学习如何进行矩阵运算__CODE__
.
我已经读过__CODE__
/ __CODE__
是最好的方法(参见http://cpplapack.sourceforge.net/).但是,我发现很难开始使用它.
有谁能给我一些示例代码,说明如何使用__CODE__
/ __CODE__
in 进行简单的矩阵运算,如矩阵乘法,求逆等__CODE__
.
如果使用其他替代方法更容易,那么我也很想看到一些示例代码.
提前致谢.
我认为,如果你是新的C
,你也是新来C
和A
.在那种情况下,我肯定会建议你,不要从Blas/Lapack开始,至少不是没有一个好的B
包装器.
我的建议是看看Eigen,它可以更容易地使用本机C
代码开始矩阵运算.您可以查看他们的入门指南.据说Eigen的性能与Blas/Lapack相当,例如他们的基准.但是我没有自己测试.
如果你真的想降低水平并使用C
/ C
看看cBlas(A
Blas 的包装)和Lapack的可用功能.另外,你可以找到一些例子来说明如何使用Lapacke(该B
LAPACK的-wrapper)这里.但是不要指望事情很好并且记录良好!
最后给出你的问题的答案:这是我前一段时间用于基准测试的代码剪辑.代码创建两个随机矩阵C
,C
并将它们乘以矩阵C
.
#include <random>
#include <cblas.h>
int main ( int argc, char* argv[] ) {
// Random numbers
std::mt19937_64 rnd;
std::uniform_real_distribution<double> doubleDist(0, 1);
// Create arrays that represent the matrices A,B,C
const int n = 20;
double* A = new double[n*n];
double* B = new double[n*n];
double* C = new double[n*n];
// Fill A and B with random numbers
for(uint i =0; i <n; i++){
for(uint j=0; j<n; j++){
A[i*n+j] = doubleDist(rnd);
B[i*n+j] = doubleDist(rnd);
}
}
// Calculate A*B=C
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, n, n, n, 1.0, A, n, B, n, 0.0, C, n);
// Clean up
delete[] A;
delete[] B;
delete[] C;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.