• blas中dgemm_的用法


    blas中函数参数实在是太多,想要愉快的使用最好还是封装下

    一个矩阵相乘dgemm_函数就要13个参数.......

    fortran中是按列存储的矩阵,而c++中是按行存储的,虽然与cblas可以选择按什么方式存储,但就是不想用


    /*
    *****************/ //a 4行2列 //b 2行3列 //c 4行3列 /******************/ // 4 2 3 void myDgemm(double* a, double* b, double* c, int m, int k, int n) { char transa = 'N', transb = 'N'; double alpha = 1.0, beta = 0.; dgemm_(&transb, &transa, &n, &m, &k, &alpha, b, &n, a, &k, &beta, c, &n); } int _tmain(int argc, _TCHAR* argv[]) { /* a = 1 2 b = 2 1 0 c = 14 19 14 3 4 6 9 7 30 39 28 1 5 32 46 35 6 2 24 24 14 */ // 按列存储a可以看成是矩阵a的转置 按列存储的b可以看成是矩阵b的转置 // a(T) = 1 3 1 6 (b)T = 2 6 // 2 4 5 2 1 9 // 0 7 // Tb和Ta就是b和a的数据按列存储的结果 // 所以b的转置乘以a的转置 = (b)T*(a)T = (ab)T = (c)T // 得出的结果便是c的转置(c)T,而又由于fortran中是按列存储,所以在c/c++里得出的就是按行存储的c double a[8] = { 1, 2, 3, 4, 1, 5, 6, 2 }; double b[6] = { 2, 1, 0, 6, 9, 7 }; double c[12] = { 0 };

    myDgemm(a,b,c, 4, 2, 3)
    for (int i = 0; i < 4; i++)
    {
    for (int j = 0; j < 3; j++)
    { cout
    << c[i * 3 + j] << " ";
    }

    cout << endl;
    }
    cout << endl; getchar(); return 0; }
  • 相关阅读:
    node.js如何让前端请求时能跨域
    手把手教你使用webpack搭建vue框架
    手把手教你使用koa2
    react性能优化
    axios post 踩坑之 post传参
    小程序自定义左上角返回按钮跳转到指定界面
    webpack入门教程
    编写可维护的js代码
    js的严格模式
    vue短信验证性能优化写入localstorage中
  • 原文地址:https://www.cnblogs.com/nkzhangkun/p/4579480.html
Copyright © 2020-2023  润新知