专栏首页C/C++基础矩阵转置与矩阵相乘

矩阵转置与矩阵相乘

前言

写这篇博客的原因是为了记录一下矩阵转置与矩阵相乘的实现代码,供日后不时之需。直接原因是今晚(2016.09.13)参加了百度2017校招的笔试(C++岗),里面就有一道矩阵转置后相乘的在线编程题。考虑到日后笔试可能会用到,特此记录,也希望能够帮助到需要的网友。

今晚的百度笔试还有一个道求矩形方格中房子的数量,可以用类似于求迷宫中寻找可行路径的深度优先搜索(DFS)加回溯法来求解,幸好之前研究过迷宫问题并记录下来写成博客,要不然,又悲剧了,短时间内很难写出那么多代码!

1.转置矩阵

1.1转置矩阵简介

把矩阵A的行换成同序数的列得到的新矩阵,叫做A的转置矩阵(Transpose of a Matrix),记作ATA^T。

例如:

因此,转置矩阵的特点: (1)转置矩阵的行数是原矩阵的列数,转置矩阵的列数是原矩阵的行数; (2)转置矩阵下标(i,j)的元素对应于原矩阵下标(j,i)的元素。

1.2实现

使用二维数组作为矩阵的存储结构,根据转置矩阵的特点,很容易得到转置矩阵。

/**************************************************
*@para:matrix:原矩阵;row:矩阵行数;column:矩阵列数
*@ret:返回转置矩阵
**************************************************/
int** getTransposeMatrix(int** matrix,int row,int column){
   int** matrixR=new int*[columns];
   for(int i=0;i<columns;++i){
        matrixR[i]=new int[rows];
   }

   for(int i=0;i<row;++i){
        for(int j=0;j<column;++j){
            matrixR[j][i]=matrix[i][j];
        }
   }
   return matrixR;
}

2.矩阵相乘

2.1矩阵相乘简介

A为m×pm\times p的矩阵,B为p×np\times n的矩阵,那么称m×nm\times n的矩阵C为矩阵AB的乘积,记作C=AB,其中矩阵C中的第 i行第j列元素可以表示为:

示例如下:

矩阵相乘的特点: (1)当矩阵A的列数等于矩阵B的行数时,A与B才可以相乘。 (2)乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。 (3)矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。

2.2示例代码

/********************************************
*@para:A:矩阵A;B:矩阵B;C:相乘结果矩阵;rowA:A的行数;columnB:B的列数;columnA:A的列数
*@ret:void 
********************************************/
void matrixMul(int **A, int **B, int **C, int rowA, int columnB, int columnA){
    for (int i=0;i<rowA;i++){
        for (int j=0; j<columnB;j++){
            C[i][j] = 0;
            for (int k=0;k<columnA;k++){
                C[i][j]+=A[i][k]*B[k][j];
            }
         }
     }
}

参考文献

[1]转置矩阵 百度百科 [2]矩阵乘法 百度百科

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • printf()详解之终极无惑

    printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。

    Dabelv
  • Mac 常用快捷键

    Mac 电脑一般都不怎么用鼠标,因此其触摸屏有丰富的单指、双指、三指甚至四指的操作之外,再加上众多的快捷键,足以应对日常操作。

    Dabelv
  • 多益网络2016春季实习校招笔试回顾(C++游戏后台开发)

    2016.04.16晚中山大学大学城校区(东校区)参加了多益网络的C++游戏后台开发的笔试。有几道笔试题还是值得斟酌和记录的,特记录如下。比较可惜,因为回老家了...

    Dabelv
  • Python numpy tensorflow 中的 点乘 和 矩阵乘法

    若 w 为 m*1 的矩阵,x 为 m*n 的矩阵,那么通过点乘结果就会得到一个 m*n 的矩阵。

    xuyaowen
  • 线性代数--MIT18.06(三)

    ,我们依然可以使用矩阵消元的形式来求解,只不过要比我们之前提到的矩阵消元多做一些消元而已,这就是Gauss-Jordan法。

    fireWang
  • 线性代数--MIT18.06(三)

    ,我们依然可以使用矩阵消元的形式来求解,只不过要比我们之前提到的矩阵消元多做一些消元而已,这就是Gauss-Jordan法。

    fireWang
  • 线性代数--MIT18.06(三)

    ,我们依然可以使用矩阵消元的形式来求解,只不过要比我们之前提到的矩阵消元多做一些消元而已,这就是Gauss-Jordan法。

    fireWang
  • 吴恩达机器学习笔记17-矩阵乘法的性质

    “Linear Algebra review(optional)——Matrix multiplication properties”

    讲编程的高老师
  • 基于LDA KNN的人脸识别详解

    人脸识别(LDA+KNN方法): dataTrain=creatData(TrainDatabasePath); dataTest=creatData(Tes...

    微风、掠过
  • 求转置矩阵问题

    输入第一行一个整数n<20,表示有n组测试数据,下面是n组数据; 每组测试数据是九个整型数(每个数都不大于10000),分别为矩阵的的每项;输出每组测试数据的转...

    书童小二

扫码关注云+社区

领取腾讯云代金券