总结一下矩阵的基本操作

总结一下矩阵的基本操作

同步更新于这里

  • 加减法

    非常简单,只要对应位置相加就行了(余老师:这不是今天的重点!!!

  • 数乘

    嗯,把所有元素同时乘以那个数就行了

  • 矩阵乘矩阵

    比较复杂,

    A*B首先要A的列数=B的行数

    然后看图意会一下,A横着过,B竖着过,

    C[i][j]=A[i][k]*A[k][j]相加,1<=k<=A的列数(或B的行数)

    (汉字表示结果的第i行,数字表示结果的第j列。

    稍微写了一个代码

    #include<iostream>
    using namespace std;
    
    const int MAXN=1e4+5;
    
    int a[MAXN][MAXN],b[MAXN][MAXN],c[MAXN][MAXN];
    
    int main(){
      int h1,l1,h2,l2;
      cin>>h1>>l1>>h2>>l2;
      if(l1!=h2){
          cout<<"算不了\n";
          return 0;
      }
      for(int i=1;i<=h1;++i){
          for(int j=1;j<=l1;++j){
              cin>>a[i][j];
          }
      }
      for(int i=1;i<=h2;++i){
          for(int j=1;j<=l2;++j){
              cin>>b[i][j];
          }
      }
      for(int i=1;i<=h1;++i){
          for(int j=1;j<=l2;++j){
              int s=0;
              for(int k=1;k<=l1;++k){
                  s=s+a[i][k]*b[k][j];
              }
              c[i][j]=s;
          }
      }
      for(int i=1;i<=h1;++i){
          for(int j=1;j<=l2;++j){
              cout<<c[i][j]<<" ";
          }
          cout<<'\n';
      }
      return 0;
    }
  • 转置

    把行变成列,列变成行

    然后有一些性质

  • 求递推

    把递推式写成只有一行的矩阵。

    比如斐波拉切,f[i]=f[i-1]+f[i-2]

    写成[f[i],f[i-1]

    那么[f[i-1],f[i-2]]乘上一个特定的n*n(元素个数)的矩阵A就可以成为[f[i],f[i-1]]

    这里可以求出这个A是

    1 1
    1 0 

    那么第i项就是[1,0]*A^(i-1)

  • 快速幂

    原理跟整数的差不多,代码如下(需自行重载*运算符)

    juzhen pow(int k){
        juzhen res=*this;
        juzhen ret(h,l);
        ret.cleanForPow();
        while(k){
            if(k&1){
              ret=ret*res;
          }
          res=res*res;
          k>>=1;
        }
        return ret;
    }

原文地址:https://www.cnblogs.com/buringstraw/p/10229184.html

时间: 2024-10-11 18:16:05

总结一下矩阵的基本操作的相关文章

MATLAB向量和矩阵的基本操作

矩阵的创建(1) rand(m,n)创建m行n列的随机矩阵(每个元素的值在0到1之间).(2) zeros(m,n)创建m行n列的0矩阵.(3) ones(m,n)创建m行n列的1矩阵(4) eye(m)创建m行m列的对角元素是1,其余元素是0的对角矩阵.(5) randn:产生正态分布的随机数或矩阵的函数 randn:产生均值为0,方差σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数. 用法: Y = randn(n):返回一个n*n的随机项的矩阵.如果n不是个数量,将返回错误信

矩阵的基本操作

1.创建矩阵 2.创建有行名和列名的矩阵

[WebGL入门]十三,minMatrix.js和坐标变换矩阵

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 坐标变换矩阵的基本功能 进行基本的3D渲染的时候,需要准备3个坐标变换矩阵,这个在之前的文章中说过很多次了.第一个是模型变换矩阵,DirectX中叫做世界变换矩阵.模型变换矩阵影响的是所绘制的模型,模型的位置,模型的旋转,模型的放大和缩小等相关的情况.第二个是视图变换矩阵,简单来说,就是定义拍

【转】Caffe初试(八)Blob,Layer和Net以及对应配置文件的编写

深度网络(net)是一个组合模型,它由许多相互连接的层(layers)组合而成.Caffe就是组建深度网络的这样一种工具,它按照一定的策略,一层一层的搭建出自己的模型.它将所有的信息数据定义为blobs,从而进行便利的操作和通讯.Blob是caffe框架中一种标准的数组,一种统一的内存接口,它详细描述了信息是如何存储的,以及如何在层之间通讯的. 1.blob Blobs封装了运行时的数据信息,提供了CPU和GPU的同步.从数学上来说,Blob就是一个N维数组.它是caffe中的数据基本单位,就像

【WebGL初学系列之五】旋转,平移,缩放

nbcoder.com地址:http://nbcoders.com/webgl-chu-xue-xi-lie-zhi-wu-ai.html 最近把WebGL做的相关Demo已经放在 http://www.nbcoders.com 上了,这样就可以直观的进行看效果. 地址:    http://lab.nbcoders.com/ixshells/ 本文旋转平移缩放Demo的地址: http://lab.nbcoders.com/ixshells/Html/ScaleRotateTranslate.

机器学习(三) Jupyter Notebook, numpy和matplotlib的详细使用 (上)

工欲善其事,必先利其器.在本章,我们将学习和机器学习相关的基础工具的使用:Jupyter Notebook, numpy和matplotlib.大多数教程在讲解机器学习的时候,大量使用这些工具,却不对这些工具进行系统讲解.我特意添加了这个章节,让同学们在后续编写机器学习算法的过程中,更加得心应手! 一.Jupyter Notebook基础 a--b:在Jupyter Notebook  选中的内容上面添加单元格------ 下面添加单元格 y: change cell to code m: ch

Python3入门机器学习经典算法与应用

第1章 欢迎来到 Python3 玩转机器学习1-1 什么是机器学习1-2 课程涵盖的内容和理念1-3 课程所使用的主要技术栈第2章 机器学习基础2-1 机器学习世界的数据2-2 机器学习的主要任务2-3 监督学习,非监督学习,半监督学习和增强学习2-4 批量学习,在线学习,参数学习和非参数学习2-5 和机器学习相关的“哲学”思考2-6 课程使用环境搭建第3章 Jupyter Notebook, numpy和matplotlib3-1 Jupyter Notebook基础3-2 Jupyter

矩阵基本操作(加减乘、求逆、转置)

看模板,寻找的最好理解,最好用的矩阵基本操作的模板 #define MAXN 100 #define zero(x) (fabs(x)<1e-10) struct mat { int n,m; double data[MAXN][MAXN]; }; ///矩阵加减乘 int add(mat& c,const mat& a,const mat& b) { int i,j,k; if (a.m!=b.m||a.n!=b.n) return 0; c.n=a.n; c.m=a.m;

MATLAB基本操作(十):关于OpenCV坐标系与MATLAB中矩阵行与列的对应

OpenCV坐标点与MATLAB中矩阵行与列的对应 Last Edit 2014/5/4 转载请注明出处:http://blog.csdn.net/jxlijunhao 之所以会写这个东西,因为要把OpenCV中得到的角点坐标,保存在txt文件中,然后投影到matlab中. 首先,OpenCV中的坐标系如下图: 所以,OpenCV中以(0,0)为原点,假定一个点(10,2),表示y=10,x=2 在matlab中以  (1,1)为原点,所以上面的点在matlab中应为(11,3) 验证代码: 在