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,如需转载请自行联系原作者
相关文章
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
混淆矩阵(Confusion Matrix)
随着机器学习和人工智能的迅速发展,分类模型成为了解决各种问题的重要工具。然而,仅仅知道模型预测对了多少样本是不够的。我们需要一种更详细、更系统的方法来理解模型的分类能力,以及它在不同类别上的表现。 混淆矩阵是在机器学习和统计学中用于评估分类模型性能的一种表格。它对模型的分类结果进行了详细的总结,特别是针对二元分类问题,另外混淆矩阵是用于评估分类模型性能的一种表格,特别适用于监督学习中的分类问题。它以矩阵形式展示了模型对样本进行分类的情况,将模型的预测结果与实际标签进行对比。
325 1
|
索引
LeetCode 54. Spiral Matrix
给定m×n个元素的矩阵(m行,n列),以螺旋顺序[顺时针]返回矩阵的所有元素
84 0
LeetCode 54. Spiral Matrix
|
JSON Java Android开发
Matrix 之 ApkChecker 的使用
Matrix 之 ApkChecker 的使用
253 0
Matrix 之 ApkChecker 的使用
LeetCode 59. Spiral Matrix II
给定正整数n,以螺旋顺序生成填充有从1到n2的元素的方阵。
88 0
Leetcode-Easy 867.Transpose Matrix
Leetcode-Easy 867.Transpose Matrix
90 0
|
机器学习/深度学习 算法
Matrix Factorization
Matrix Factorization ①linearNetwork Hypothesis 机器学习的作用就是要从一堆数据中学习到学习到某种能力,然后用这种skill来预测未来的结果。
1050 0
|
Android开发