原创
(原创)矩阵运算
2009-5-31 22:33
3306
9
9
分类:
软件与OS
这2天用c语言写了一个矩阵 的基本运算库函数,代码:https://static.assets-stash.eet-china.com/album/old-resources/2009/5/31/399715e2-bf8b-4a42-ba95-cddeb09fb8b4.rar
代码只有几百行,也就是只有
extern CMat *CreateMat(uint cols,uint rows,MAT_DATA_TYPE type, void *data);
extern CMat *SetMatData(CMat* mat , void *data);
extern void *RealseMat(CMat* mat);
extern double GetData2D(CMat* mat,uint cols,uint rows);
extern double SetData2D(CMat* mat,uint cols,uint rows,double val,MAT_DATA_TYPE type);
extern void PrintMat(CMat* mat);
extern CMat *ReshapeMat(CMat *mat,uint rows,uint cols);
extern CMat *AddMat(CMat *mat ,CMat *mat1,CMat *mat2);
extern CMat *SubMat(CMat *mat ,CMat *mat1,CMat *mat2);
extern CMat *MulMat(CMat *mat ,CMat *mat1,CMat *mat2);
//////////////////////////////////////////////////////////////////////////////////////////////////////
//下面是一些内部函数
extern void* DataTypeTo(void *data,MAT_DATA_TYPE type);//>>>
extern uchar mSizeOf(MAT_DATA_TYPE type);
extern uchar *mGetAddr(CMat *mat , uint x ,uint y);
extern double mGetRealData(uchar * addr , MAT_DATA_TYPE type);
extern double mSetRealData(uchar * addr , MAT_DATA_TYPE type , double val);
但是我写了2天的时间,问题很多,主要是程序的通用性方面的,总结来大概有这几个:
1.第一句话
在大型的 比较规范的操作中 c++绝对比c在代码管理上面更好用。已经严重感觉到了,但是我还要用c去写这些东西
2.指针在初始化的时候要初始化为NULL
3.矩阵的加减法 需要考虑的内容:
结果矩阵是否开辟空间,
结果矩阵的类型是否与其他2个矩阵类型相同,
结果矩阵是否是其他2个矩阵中的1个
4.不好的是 如果矩阵的大小。。有问题不能够对错误进行有效的处理
5.还是初始化的问题:在c++中可以通过构造函数来在变量建立的时候进行初始化,但在c语言中没有这回事,
对于变量没有固定的初始值,对于就结构体也一样,声明的指针只是一个地址而已,对于就结构体的指针在初始化的时候
也一一样,没有对其开辟空间,所以你不能对指针有任何的操作,例如引用他的一个变量等等
C语言中没有多重的特性,对于不同的数据类型的处理,c语言有点繁琐,不过似乎可以学到很多东西,对于指针的时候似乎还很差
c语言里面真正的特性并没有很好的使用
6.尽量把保护一些东西:最近在写代码的时候我尽量保证外面的操作可以不去考虑太多的东西,函数里面要做的事情就会很多了
指针是否已经分配空间 变量的类型 等等。。。。觉得现在的语言真的很繁琐,智能化水平太低
是对是错,但是是我自己感受的,我下民要做的除了把算法优化外,就是用c++把代码重新写一下
发现自己写的代码在OPENCV里面有一模一样的,而且我自己写的时候经常去参考里面的设计方法,我突然问自己我还些吗?有写好的库函数干嘛不用啊?但是没有代码去写,就不会有那种结果出来后的欣喜,没有为自己那一点一点的收获的惊喜。。。呵呵,有时候事情就是和难抉择!
先用OPENCV吧 ,毕竟没有多少时间,需要自己写的时候再去写吧
文章评论(0条评论)
登录后参与讨论