Matrix

简介:
#include "Stdio.h"
#include "memory.h"
template < typename  T>
void  TypePrint(T v);
 
template < typename  T, int  M, int  N>
class  Matrix
{
public :
     Matrix( void ){
 
         data =  new  T[M*N];
 
     };
     ~Matrix( void ){};
 
     int  getVIndex()
     {
         return  M;
     }
     int  getHIndex()
     {
         return  N;
     }
 
     T getxy( int  x,  int  y)
     {
         return  data[x*N+y];
     }
 
     void  setxy( int  x,  int  y,T f)
     {
         data[x*N + y] = f;
     }
 
     void  setdata(T*datap, int  size)
     {
         memcpy (data,datap,size);
     }
 
     Matrix<T,N,M> transpote()
     {
         Matrix<T,N,M> m;
         for ( int  i = 0; i < M; i++)
         {
             for ( int  j = 0; j < N; j++)
             {
                 m.setxy(j,i,getxy(i,j));
             }
         }
         return  m;
 
     }
 
     Matrix<T,M,N> operator+(Matrix<T,M,N> &adv)
     {
         Matrix<T,N,M> m;
         for ( int  i = 0; i < M; i++)
         {
             for ( int  j = 0; j < N; j++)
             {
                 m.setxy(getxy(i,j)+adv.getxy(i,j));
             }
         }
         return  m;
     }
 
     Matrix<T,M,N> operator-(Matrix<T,M,N> &adv)
     {
         Matrix<T,N,M> m;
         for ( int  i = 0; i < M; i++)
         {
             for ( int  j = 0; j < N; j++)
             {
                 m.setxy(getxy(i,j)-adv.getxy(i,j));
             }
         }
         return  m;
     }
 
     bool  operator==(Matrix<T,M,N> &adv)
     {
         Matrix<T,N,M> m;
         for ( int  i = 0; i < M; i++)
         {
             for ( int  j = 0; j < N; j++)
             {
                 if (getxy(i,j)!=adv.getxy(i,j)) return  false ;
             }
         }
         return  true ;
     }
 
     bool  operator!=(Matrix<T,M,N> &adv)
     {
         Matrix<T,N,M> m;
         for ( int  i = 0; i < M; i++)
         {
             for ( int  j = 0; j < N; j++)
             {
                 if (getxy(i,j)!=adv.getxy(i,j)) return  true ;
             }
         }
         return  false ;
     }
 
     void  print()
     {
         printf ( "\n" );
         for ( int  i = 0; i < M; i++)
         {
             for ( int  j = 0; j < N; j++)
             {
                 TypePrint(getxy(i,j));
                 printf ( ",\t" );
             }
             printf ( "\n" );
         }
     }
 
private :
 
     T *data;
 
};
 
template < typename  T, int  M, int  N, int  P>
Matrix<T,M,P> operator*(Matrix<T,M,N> &x, Matrix<T,N,P> &y)
{
     Matrix<T,M,P> m;
 
     for ( int  i = 0; i < M; i++)
     {
         for ( int  j = 0; j < P; j++)
         {
             T v = 0;
 
             for ( int  k = 0; k < N; k++)
             {
                 v += (x.getxy(i,k)*y.getxy(k,j));
             }
 
             m.setxy(i,j,v);
 
         }
     }
 
     return  m;
}
 
template < typename  T, int  M, int  N>
Matrix<T,M,N> operator*(Matrix<T,M,N> &x, T y)
{
     Matrix<T,M,N> m;
 
     for ( int  i = 0; i < M; i++)
     {
         for ( int  j = 0; j < N; j++)
         {
             m.setxy(i,j,m.getxy(i,j)*y);
         }
     }
 
     return  m;
}
 
template < typename  T, int  M, int  N>
Matrix<T,M,N> operator*(T y,Matrix<T,M,N> &x)
{
     return  x*y;
}
 
 
 
 
template <>
void  TypePrint( float  v)
{
     printf ( "%f" ,v);
}
 
 
template <>
void  TypePrint( int  v)
{
     printf ( "%d" ,v);
}
 
#define type float
 
 
 
int  d1[] =
{
     1,2,
     2,3,
     3,0
};
 
int  d2[] =
{
     2,-3,0,
     0,1,-2,
     -4,5,10
};
 
 
 
int  main()
{
     Matrix< int ,3,2> s;
 
     s.setdata(d1, sizeof (d1));
 
     Matrix< int ,3,3> s1;
     
     s1.setdata(d2, sizeof (d2));
     
     Matrix< int ,3,2> s2 = s1*s;
     
     Matrix< int ,2,3> s3 = s2.transpote(); //转置了
     
     s.print();
     s1.print();
     s2.print();
     s3.print();
     return  0;
}                   本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/p/7803888.html,如需转载请自行联系原作者
相关文章
|
索引
LeetCode 54. Spiral Matrix
给定m×n个元素的矩阵(m行,n列),以螺旋顺序[顺时针]返回矩阵的所有元素
75 0
LeetCode 54. Spiral Matrix
LeetCode 59. Spiral Matrix II
给定正整数n,以螺旋顺序生成填充有从1到n2的元素的方阵。
73 0
|
JSON Java Android开发
Matrix 之 ApkChecker 的使用
Matrix 之 ApkChecker 的使用
221 0
Matrix 之 ApkChecker 的使用
|
机器学习/深度学习 算法
Matrix Factorization
Matrix Factorization ①linearNetwork Hypothesis 机器学习的作用就是要从一堆数据中学习到学习到某种能力,然后用这种skill来预测未来的结果。
1026 0
|
Android开发