随笔 - 741  文章 - 0  评论 - 260  阅读 - 416万

Matrix

//transpote转置矩阵
#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;
}
posted on   莫水千流  阅读(781)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2014-11-08 恢复SD卡错删数据
2013-11-08 Holiday、Vacation、Days off、Leave、Break
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示