matlab中blas库的学习
来源:互联网 发布:2017网络手游排行榜 编辑:程序博客网 时间:2024/04/28 12:11
example: dgemm函数
1 入口参数:
void dgemm( char *transa, char *transb, ptrdiff_t *m, ptrdiff_t *n, ptrdiff_t *k, double *alpha, double *a, ptrdiff_t *lda, double *b, ptrdiff_t *ldb, double *beta, double *c, ptrdiff_t *ldc);
2 功能介绍:
其中 transa
和 transb
分别代表B和C是否进行转置,若不转置为参数"N"
,转置为"T"
;m
n
k
lda
ldb
ldc
代表相应的维数;
下面先介绍不转置的情况:
此时,m
为矩阵A
的行数,n
为矩阵B
的列数,k
为矩阵A
的列数或者矩阵B
的行数,lda
、ldb
、ldc
分别为矩阵A
、B
、C
的行数。
下来,介绍一下转置的情况:
此时,m
为矩阵A
转置后的行数,n
为矩阵B
的列数,k
为矩阵A
转置后的列数或者矩阵B
的行数,lda
、ldb
、ldc
分别为矩阵A
、B
、C
的行数。
下面是代码实现C = A*B 的代码
#if !defined(_WIN32)#define dgemm dgemm_#endif#include "mex.h"#include "blas.h"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){ double *A, *B, *C; /* pointers to input & output matrices*/ size_t m,n,p; /* matrix dimensions */ /* form of op(A) & op(B) to use in matrix multiplication */ char *chn = "N"; /* scalar values to use in dgemm */ double one = 1.0, zero = 0.0; A = mxGetPr(prhs[0]); /* first input matrix */ B = mxGetPr(prhs[1]); /* second input matrix */ /* dimensions of input matrices */ m = mxGetM(prhs[0]); p = mxGetN(prhs[0]); n = mxGetN(prhs[1]); if (p != mxGetM(prhs[1])) { mexErrMsgIdAndTxt("MATLAB:matrixMultiply:matchdims", "Inner dimensions of matrix multiply do not match."); } /* create output matrix C */ plhs[0] = mxCreateDoubleMatrix(m, n, mxREAL); C = mxGetPr(plhs[0]); /* Pass arguments to Fortran by reference */ dgemm(chn, chn, &m, &n, &p, &one, A, &m, B, &p, &zero, C, &m);}
下面是代码实现
#if !defined(_WIN32)#define dgemm dgemm_#endif#include "mex.h"#include "blas.h"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){ double *A, *B, *C; /* pointers to input & output matrices*/ size_t m,n,p,k; /* matrix dimensions */ /* form of op(A) & op(B) to use in matrix multiplication */ char *chn = "N"; char *cht = "T"; /* scalar values to use in dgemm */ double one = 1.0, zero = 0.0; A = mxGetPr(prhs[0]); /* first input matrix */ B = mxGetPr(prhs[1]); /* second input matrix */ /* dimensions of input matrices */ m = mxGetM(prhs[0]); p = mxGetN(prhs[0]); n = mxGetN(prhs[1]); k = mxGetM(prhs[1]); /* create output matrix C */ plhs[0] = mxCreateDoubleMatrix(p, n, mxREAL); C = mxGetPr(plhs[0]); /* Pass arguments to Fortran by reference */ dgemm(cht, chn, &p, &n, &m, &one, A, &m, B, &k, &zero, C, &p);}
0 0
- matlab中blas库的学习
- 学习BLAS库 -- BLAS库简介
- BLAS库学习
- 学习BLAS库 -- DDOT
- 学习BLAS库 -- DTRSM
- 学习BLAS库 -- GEMV
- 学习BLAS库 -- TRMV
- 学习BLAS库 -- AXPY
- 学习BLAS库 -- GEMM
- 学习BLAS库 -- GER
- 学习BLAS库 -- ASUM
- 学习BLAS库 -- ROT
- 学习BLAS库 -- COPY
- CUDA的BLAS数学库
- CUDA的BLAS数学库
- SPARK的线性代数库BLAS
- 学习BLAS库 -- Conjugate Gradient Method
- BLAS学习笔记(一)
- Paint和Canvas
- 工作常用工具汇总
- linux自学笔记(2)
- 【蓝桥杯】【基础练习19】【回形取数】
- STL中为什么我们更偏爱vector而不是deque
- matlab中blas库的学习
- rsync同步工具的使用
- 浅拷贝和深拷贝详解
- I2C笔记
- jvm参数配置
- CodingNet - Learning - 1
- mac 10.11 下的sourceTree 和 git 总是需要输入密码的解决办法
- 一个阿里笔试题
- android中的style部分属性值介绍