矩阵转置与矩阵相乘

矩阵转置与矩阵相乘1.转置矩阵1.1转置矩阵简介把矩阵A的行换成同序数的列得到的新矩阵,叫做A的转置矩阵(TransposeofaMatrix),记作ATA^T。例如:因此,转置矩阵的特点:(1)转置矩阵的行数是原矩阵的列数,转置矩阵的列数是原矩阵的行数;(2)转置矩阵下标(i,j)的元素对应于原矩阵下标(j,i)的元素。1.2实现使用二维数组作为矩阵的存储结构,根据转置矩阵的特点,很容易得到转置

大家好,又见面了,我是你们的朋友全栈君。

前言

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

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

1.矩阵转置

1.1 简介

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

例如:
这里写图片描述
因此,转置矩阵的特点:
(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 × p m\times p m×p 的矩阵,B 为 p × n p\times n p×n 的矩阵,那么称 m × n m\times n m×n 的矩阵 C 为矩阵 A 与 B 的乘积,记作 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] 矩阵乘法 百度百科

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148712.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sm总线控制器找不到驱动程序_【KHGEARS钧兴谐波 | 新品】埃斯顿发布总线伺服驱动系统 ProNet Summa…「建议收藏」

    sm总线控制器找不到驱动程序_【KHGEARS钧兴谐波 | 新品】埃斯顿发布总线伺服驱动系统 ProNet Summa…「建议收藏」高工机器人CEO圈群招募中,欢迎感兴趣的朋友们加微信号:13632944360入群;添加微信时请备注单位-姓名-职务,通过审核后我们将邀请进群。2019年3月6日,以“创新设计极致表达”为主题的埃斯顿第三代运动控制解决方案产品发布会在江苏南京埃斯顿自动化总部隆重举行,埃斯顿重磅发布了新一代伺服驱动系统ProNetSumma。ProNetSumma系列驱动器可支持EtherCAT总…

    2022年5月3日
    45
  • Navicat Premium 15激活码【2021.10最新】

    (Navicat Premium 15激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~09LV…

    2022年3月28日
    65
  • EnableEventValidation 是什麽東東?

    EnableEventValidation 是什麽東東?
    回发或回调参数无效。在配置中使用或在页面中使用<%@PageEnableEventValidation="true"%>启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用ClientScriptManager.RegisterForEventValidation方法来注册回发或回调数据以进行验证。
    说明:执行

    2022年7月26日
    6
  • centos7 安装nginx 完整步骤「建议收藏」

    centos7 安装nginx 完整步骤「建议收藏」1.安装gccgcc是用来编译下载下来的nginx源码 yuminstallgcc-c++2、安装pcre和pcre-devel  PCRE(PerlCompatibleRegularExpressions)是一个Perl库,包括perl兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,pcre-devel是使用pcre开…

    2022年4月29日
    94
  • js——职责链模式(责任链模式)[通俗易懂]

    js——职责链模式(责任链模式)[通俗易懂]js——职责链模式(责任链模式)使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这些处理请求的对象形成一个链,并沿着这个链传递请求,直到有一个对象处理它为止。如公交车:乘客就是请求,公交路线就是职责链,每个站点都是一个职责处理对象。乘客上车了,他只有一个目的地,但公交车并不知道是哪,所以公交车要做的就是一站挨着一站的开,等到乘客到了目的地,自然就下车了。放到程序上就是,接收到一个请求,但是有好几个对象都可以处理该请求,但不知道哪个最合适,所以就将这些对象连接起来形成一个职

    2025年6月3日
    7
  • rsync+inotify自动进行同步

    rsync+inotify自动进行同步

    2021年5月31日
    97

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号