【图像处理】矩阵运算代码实现1
2016-02-18 21:02
489 查看
这里主要实现矩阵的一些基础运算,包括转置及乘法。后续将进行矩阵求逆的总结。
由于转置及乘法都比较简单,对其原理不再赘述。
由于转置及乘法都比较简单,对其原理不再赘述。
1、矩阵打印
void matPrint(double* mat, int row,int col){ for(int i=0; i<row; i++) { for(int j=0; j<col; j++) printf("%2.2f ", mat[i*col+j]); printf("\n"); } }
2、矩阵转置
int matTrans(double *a,int ra,int ca,double *t){ if(a==NULL||t==NULL){ return 0; } int i,j; for(i=0;i<ra;i++){ for(j=0;j<ca;j++){ *(t+j*ra)=*a++; } t++; } return 1; }
3、矩阵乘法
int matMul(double *a,double *b,int ra,int ca,int rb, int cb,double *c){ if(a==NULL||b==NULL||c==NULL){ return 0; } if(ca!=rb){ printf("column no. of A must equal to row no. of b"); return 0; } int i,j,k; double sum=0.0; // 为了使得内存访问的方便,这里采用b的转置进行运算。当a的行与b的某一列进行卷积时,相当于a的行与bT的行进行卷积。 double *bT = (double*)malloc(sizeof(double)*rb*cb); if(bT==NULL) return 0; if(!matTrans(b,rb,cb,bT)){ return 0; } double *bT_start=bT; for(i=0;i<ra;i++){ for(j=0;j<cb;j++){ sum =0.0; for(k=0;k<rb;k++){ sum+=((*(a+k)) * (*(bT+k))); } bT+=rb; *c++ =sum; } a+=ca; bT = bT_start; } free(bT); return 1; }
相关文章推荐
- PHP中的字符串定义——Heredoc结构形式
- Java基础笔记 – 线程同步问题(转)
- Servlet基本概念
- Java基本数据类型
- Java 线程停止
- eclipse 相关
- C++学习笔记之 函数重载和函数指针在一起
- java数据类型与运算符
- 第十二章编程练习(3)
- pp看书笔记---C#高级编程第九版 第八章 【委托、Lambda表达式和事件】
- 1004. Counting Leaves (30)
- C++11的mutex和lock_guard,muduo的MutexLock 与MutexLockGuard
- C++ 多线程的数据保护机制
- Java集合:集合框架
- 【图像处理】OTSU二值化原理及代码实现
- [转载]python的常用代码模板
- Java排序算法:希尔排序
- python import 引入简单介绍
- 2.7-3 如何将Eclipse 项目导入Android studio中
- 编程遇到的部分英语