1、二维数据矩阵的乘法:

#include<iostream>
#include<math.h>
#include<string>
using namespace std;
int main()
{int m1, n1, m2, n2;cout << "请分别输入第一个矩阵的行数m1和列数n1:";cin >> m1 >> n1;cout << "请分别输入第二个矩阵的行数m2和列数n2:";cin >> m2 >> n2;float** M1 = new float* [m1];float** M2 = new float* [m2];float** M3 = new float* [m1];for (int i = 0; i < m1; i++){M1[i] = new float[n1];}for (int i = 0; i < m2; i++){M2[i] = new float[n2];}for (int i = 0; i < m1; i++){M3[i] = new float[n2];}for (int i = 0; i < m1; i++){for (int j = 0; j < n1; j++){M1[i][j] = i + j;}}for (int i = 0; i < m2; i++){for (int j = 0; j < n2; j++){M2[i][j] = i + j + 1;}}for (int i = 0; i < m1; i++){for (int j = 0; j < n1; j++){cout << M1[i][j] << "\t";}cout << endl;}cout << endl << endl;for (int i = 0; i < m2; i++){for (int j = 0; j < n2; j++){cout << M2[i][j] << "\t";}cout << endl;}cout << endl << endl;//二维动态数组的定义与赋值if (n1 == m2)//做一个简单的判断  是否满足矩阵相乘的规则{for (int i = 0; i < m1; i++){for (int j = 0; j < n2; j++){M3[i][j] = 0;for (int k = 0; k < n1; k++){M3[i][j] = M3[i][j] + M1[i][k] * M2[k][j];}continue;//该程序的关键之处}}for (int i = 0; i < m1; i++){for (int j = 0; j < n2; j++){cout << M3[i][j] << "\t";}cout << endl;}cout << endl << endl;}elsecout << "不满足计算条件!!!" << endl;cout << endl << endl;delete[]M1;delete[]M2;delete[]M3;cout << endl << endl;以上是二维数组的乘法,两个数组分别是M1*N1维和M2*N2维(其中N1=M2)system("pause");return 0;
}

2、三维矩阵的乘法:

备注:这里主要是参照MATLAB的算法,按照页来计算,本文是按照平行于XY平面为页来进行计算的,故此这里对三维数组的第三维要求必须一样,当然换一个页对应的也有如是的要求。

#include<iostream>
#include<math.h>
#include<string>
using namespace std;
int main()
{//接下来练习一下三维数组的乘法  这里按照第三页的乘法(通俗一点就是按照垂直于Z轴切片,然后按“片”进行乘法)//动态三维数组的定义int l1, w1, h1, l2, w2, h2;cout << "请输入第一个三维矩阵的各个维度l1、w1、h1:";cin >> l1 >> w1 >> h1;cout << "请输入第二个三维矩阵的各个维度l2、w2、h2:";cin >> l2 >> w2 >> h2;float*** P1 = new float** [l1];float*** P2 = new float** [l2];float*** P3 = new float** [l1];for (int i = 0; i < l1; i++){P1[i] = new float* [w1];for (int j = 0; j < w1; j++){P1[i][j] = new float[h1];}}for (int i = 0; i < l2; i++){P2[i] = new float* [w2];for (int j = 0; j < w2; j++){P2[i][j] = new float[h2];}}for (int i = 0; i < l2; i++){P3[i] = new float* [w2];for (int j = 0; j < w2; j++){P3[i][j] = new float[h2];}}//三维数组赋初值for (int i = 0; i < h1; i++){for (int j = 0; j < l1; j++){for (int k = 0; k < w1; k++){P1[j][k][i] = i + j + k;}}}for (int i = 0; i < h1; i++){for (int j = 0; j < l1; j++){for (int k = 0; k < w1; k++){cout << P1[j][k][i] << "\t";}cout << endl;}cout << endl << endl;}cout << endl << endl;for (int i = 0; i < h2; i++){for (int j = 0; j < l2; j++){for (int k = 0; k < w2; k++){P2[j][k][i] = i + j + k;}}}for (int i = 0; i < h2; i++){for (int j = 0; j < l2; j++){for (int k = 0; k < w2; k++){cout << P2[j][k][i] << "\t";}cout << endl;}cout << endl << endl;}cout << endl << endl;//数组乘法运算if (h1 == h2 && w1 == l2){for (int i = 0; i < h1;i++){for (int j = 0; j < l1; j++){for (int k = 0; k < w2; k++){P3[j][k][i] = 0.0;for (int t = 0; t < w1; t++){P3[j][k][i] = P3[j][k][i] + P1[j][t][i] * P2[t][k][i];}continue;//该程序的关键之处}}}for (int i = 0; i < h2; i++){for (int j = 0; j < l1; j++){for (int k = 0; k < w2; k++){cout << P3[j][k][i] << "\t";}cout << endl;}cout << endl << endl;}}else{cout << "这两个三维矩阵不能进行乘法运算!!!" << endl;}
delete[]P1;delete[]P2;delete[]P3;system("pause");return 0;
}

本文在数组的定义上用的是动态数组的定义方法,且用new来进行定义的,也可以用malloc来进行相关定义,语法是差不多的,用该语句在头文件里面记得加上#include<stdio.h>和#include<stdlib.h>,还可以用结构体来定义三维数组。

重点:假如有错或者各位看官有更好的点子欢迎评论一起探讨。

C++中关于二维矩阵和三维矩阵的计算相关推荐

  1. python 将三维数据转为二维_将三维矩阵转换/重塑为二维矩阵

    使用^{},然后使用^{},如下-X.transpose(1,2,0).reshape(-1,X.shape[0]) 解释- 1)您想要得到由X[:, 0, 0].X[:, 0, 1]等组成的行,也就 ...

  2. Qt中打开二维、三维的工程图

    用了整整一个周的时间才搞完如何在Qt中打开二维.三维的工程图,并实现基本的移动.旋转.放大缩小.动画等功能.在这个过程中网上找了很多资料,主要用到Qt 中的QAxWidget类(ActiveX),下面 ...

  3. python中numpy中一维二维三维数组的意思

    python中numpy中一维二维三维数组的意思: 以下为一维二维三维数组图形化: 那么一维通俗点就是行(横着看)只有这个,别无二家. 二维通俗点就是行(横着看)+列(竖着看),只有这种形式. 三维比 ...

  4. python 将三维数据转为二维_python 二维矩阵转三维矩阵示例

    如下所示: >>> import numpy as np >>> a = np.arange(12).reshape(3,4) >>> a arr ...

  5. python中的二维数组与一维数组,矩阵和一维数组之间的运算

    一.python中的二维数组和一维数组之间的运算 1.当二维数组为p×p维 a=np.array([[1,2],[3,4]]) print(a.shape) a 输出: (2, 2) array([[ ...

  6. 数据建模中的二维表和一维表!

    [讨论] 什么是表/一维表/二维表,哪位给个准确的定义 [复制链接] 透视表要求是一维表, 那什么是表.一维表.二维表呢?查了一下午也没有找到准确的定义, 把找到的内容罗列如下: ++++++++++ ...

  7. 二维坐标和三维坐标相互转换

    原理参考世界坐标系.相机坐标系.图像坐标系.像素坐标系之间的转换 我的需求是将二维点转换成三维点,旋转三维点,再转换为二维点,此处的旋转跟相机成像的旋转矩阵又没有关系. 假定像素坐标为(u,v),处理 ...

  8. ROS:二维坐标映射到三维坐标上(彩色与深度图像匹配)(基于深度相机D415)

    最近在用D435做物体识别抓取的时候发现二维坐标到三维坐标没有一个直接能用的从二维像素点坐标转换到三维坐标的ROS节点,自己之前写过的kinect V2的坐标映射的通用性太差,所以这次写了一个节点,利 ...

  9. FigDraw 24. SCI文章中绘图二维直方图及组合图

    点击关注,桓峰基因 桓峰基因公众号推出基于R语言绘图教程并配有视频在线教程,目前整理出来的教程目录如下: FigDraw 1. SCI 文章的灵魂 之 简约优雅的图表配色 FigDraw 2. SCI ...

  10. 旋转——绕原点二维旋转,绕任意点的二维旋转,三维基本旋转,绕任意轴的三维旋转

    1 简介 计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移.旋转.缩放.剪切这几种.本文以及接下来的几篇文章重点介绍一下关于旋转的变换,包括二维旋转变换. ...

最新文章

  1. 打开数“智”化之门,一字之差带来的思考
  2. 什么?拼命栽培员工,让他强大到足以离开
  3. python 串口_Python串口操作库pyserial(1)
  4. Java 中如何模拟真正的同时并发请求?
  5. .NET架构小技巧(5)——反射,架构人员法宝III
  6. 数据这么多,且看R语言怎么处理!
  7. win2003无法进入桌面_救急,如何通过命令行备份桌面重要文件?
  8. 【渝粤教育】国家开放大学2018年秋季 1121t健康教育与健康促进 参考试题
  9. 难道我真的只是你生命中的过客?
  10. arduino超声波测距接线图详细_Arduino超声波测距模块使用
  11. 【扫描线】【POJ-1177】Picture【周长并】
  12. 三菱PLC编程软件操作快捷键汇总
  13. 用HackRF One模拟GPS信号
  14. 基于微信小程序电影购选系统
  15. VS2010SP1dvd1安装失败。
  16. 数字图像处理100问—27 双三次插值( Bicubic Interpolation )
  17. 实验:windows密码破解
  18. 国内免备案服务器有哪些?
  19. 30M DEM数据处理成图
  20. vc2010串口通信(使用mscomm控件)

热门文章

  1. 2017年度全国出差地图!
  2. 使用 JS 实现一个本地数据库
  3. Chrome扩展框架-浏览器插件安装方法
  4. python数据分析入门书籍-Python极简讲义:一本书入门数据分析与机器学习
  5. c# autocad二次开发 dwg文件的框表框图导出pdf方便打印 dwg转pdf工具
  6. JTable设置表头背景色
  7. ARouter使用问题
  8. form表单(自用)
  9. navicat怎么导入sql文件
  10. 从生日来推算八字(从零开始学python)