矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列(column)和第二个矩阵的行数(row)相同时才有意义 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。

运算如下所示:

我们可以在2个矩阵上执行加,减,乘和除运算。从用户输入一行数字和列号,组成第一个矩阵元素和第二个矩阵元素。然后,对用户输入的矩阵执行乘法。

1.思路

首先,由于输入的矩阵维数是随机的,因此,我们要设计程序,手动把行和列算出来,这样方便后续乘法运算。并且把输入的数字提取出来,放入一个float型数组中,这样我们就完成了读入工作,之后就是利用乘法公式进行运算,并把结果放入一个二维数组中,最后把结果输出来就行了。

2.数据读入

这里是容易出现问题的地方,最初的想法是用cin.getline()把整个输入都读进一个char型字符序列中,然后再用特定位置的数做乘法。后来发现有两个问题,第一,数字读入一个char字符序列中就变成了ASCII码,这个还比较好解决,用每个位置的数减去‘ 0‘就行了。第二个问题是硬伤,就是把一个数字放到一个char型的序列中,他会把连在一起的数字给拆开,比如说我想输入123,他不会把123放到一个格里,而是1放到一个格,2放入另一个格,3再放一个格。所以不能放到char[]中。于是想到把输入放到float数组里, 但是这样就有一个新问题,就是如何把符号摘出去。如果直接用cin,那么碰到符号它并不会跳过,而是也会录入,这是不行的,但是对于这个问题,我们知道输入的格式都是类似于:123,1,2;1,2,3这样的,规律就是一个数字一个符号,我们可以用赋值的方式来跳过,和;的录入。具体来说就是先用一个cin,把第一个数字录入,然后用c=getchar()的方式来跳过逗号的录入。然后再cin,再c=getchar,最终当c=getchar()等于回车,也就是n时停止。由于c=getchar()是判断条件,所以我们这个循环要从逗号开始,也就是先录入一个数字,再进行循环。

在录入的过程中,我们就可以直接把行数和列数读取出来:行数就是;(分号)的个数加一,列数就是总共的数字个数除以行数。

cout << "please enter matrixA:"<<endl;
cin >> A[i];
while ((c=getchar()) != 'n')
{cin >> A[++i];if (c == ';')m++;
}m++;i++;n = i/ m;
cout << "please enter matrixB:"<<endl;
cin >> B[j];
while ((c = getchar()) != 'n')
{cin >> B[++j];if (c == ';')k++;
}k++;j++;p = j / k;

拿第一段,矩阵A的录入来说,m是行数,由于m作为;的计数器,因此行数要在分号个数的基础上加一,即m++,而由于A[ ]这个数组是从A[0]开始的,因此A[i]表示有i+1个数,所以i++。这样就实现了矩阵A,B的录入,虽然录进去的是一个一维的数组,但也不妨碍后续的矩阵乘法计算。

3.矩阵相乘

在矩阵乘法第一矩阵中,一个行元素乘以第二矩阵所有列元素。让我们通过下面的代码理解3 * 3和3 * 3矩阵的矩阵乘法:

下面来看看看C++中的矩阵乘法程序。

#include <iostream>
using namespace std;
int main()
{  int a[10][10],b[10][10],mul[10][10],r,c,i,j,k;    cout<<"enter the number of row=";    cin>>r;    cout<<"enter the number of column=";    cin>>c;    cout<<"enter the first matrix element=n";    for(i=0;i<r;i++)    {    for(j=0;j<c;j++)    {    cin>>a[i][j];  }    }    cout<<"enter the second matrix element=n";    for(i=0;i<r;i++)    {    for(j=0;j<c;j++)    {    cin>>b[i][j];    }    }    cout<<"multiply of the matrix=n";    for(i=0;i<r;i++)    {    for(j=0;j<c;j++)    {    mul[i][j]=0;    for(k=0;k<c;k++)    {    mul[i][j]+=a[i][k]*b[k][j];    }    }    }    //for printing result    for(i=0;i<r;i++)    {    for(j=0;j<c;j++)    {    cout<<mul[i][j]<<" ";    }    cout<<"n";    }    return 0;
}

执行上面代码得到以下结果

enter the number of row=3

enter the number of column=3

enter the first matrix element= 1 2 31 2 3

1 2 3

enter the second matrix element= 1 1 1 2 1 2 3 2 1

multiply of the matrix= 14 9 8 14 9 8 14 9 8

#数组元素相乘_C++ 矩阵相乘相关推荐

  1. matlab三维数组与二维矩阵相乘问题

    Matlab三维数组与二维矩阵相乘问题 近来在搞一个改进近场music算法的仿真问题,用matlab进行二维搜索的时候写了很多for循环,导致运行速度极慢.考虑到matlab语言本身的矩阵运算特点,改 ...

  2. pytorch元素相乘_PyTorch 对应点相乘、矩阵相乘实例

    一,对应点相乘,x.mul(y) ,即点乘操作,点乘不求和操作,又可以叫作Hadamard product:点乘再求和,即为卷积 data = [[1,2], [3,4], [5, 6]] tenso ...

  3. Pytorch——对应点相乘和矩阵相乘

    1. 点乘,对应元素相乘,不求和 import torcha = torch.Tensor([[1,2], [3,4], [5,6]]) b1 = a.mul(a)// b2=a*a b1 Out[7 ...

  4. PyTorch 对应点相乘、矩阵相乘

    一,对应点相乘,x.mul(y) ,即点乘操作,点乘不求和操作,又可以叫作Hadamard product:点乘再求和,即为卷积 >>> a = torch.Tensor([[1,2 ...

  5. C和指针之数组编程练习5 (矩阵相乘)

    1.问题 5.如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C.这个矩阵的每个元素是由下面的公式决定的: 例如: 结果矩阵中14这个值是通过2×-2加上- ...

  6. Hadoop 2.6 使用Map Reduce实现矩阵相乘2 矩阵相乘

    项目地址:https://github.com/tudoupaisimalingshu/hadoop_matrix 一.首先将右侧矩阵进行转置(点击打开) 二.然后进行相乘运算 1.将右侧转置矩阵缓存 ...

  7. matlab 多个矩阵相乘,两矩阵相乘

    请教各路大神!请问大家,我的两个矩阵怎么相乘啊?我的代码怎么都运行不起.能否请知道的大神帮我看看代码哪里有问题?拜托!! clear k1 = 0.289; k2 = 0.793/5000; k3 = ...

  8. python矩阵乘法 点乘_Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)

    Tensorflow二维.三维.四维矩阵运算(矩阵相乘,点乘,行/列累加) 1. 矩阵相乘 根据矩阵相乘的匹配原则,左乘矩阵的列数要等于右乘矩阵的行数. 在多维(三维.四维)矩阵的相乘中,需要最后两维 ...

  9. C++两个矩阵相乘代码(内附有矩阵相乘的条件与规则,以及对代码的详细解答)

    再复制粘贴代码之前可以先了解学习一下什么是矩阵相乘,矩阵相乘的条件与规则又是什么. 点击一下链接即可进入学习:                       #矩阵相乘的学习链接 以下是两个矩阵相乘的代 ...

  10. python数组对应元素相乘_python的几种矩阵相乘的公式详解

    1. 同线性代数中矩阵乘法的定义: np.dot() np.dot(A, B):对于二维矩阵,计算真正意义上的矩阵乘积,同线性代数中矩阵乘法的定义.对于一维矩阵,计算两者的内积.见如下Python代码 ...

最新文章

  1. 第十一篇:Discourse 话语/论述
  2. 有关sql server 2000的数据类型
  3. mysql插入ㄖ_原生JavaScript代码100个实例
  4. java课程设计 成绩_Java课程设计—学生成绩管理系统(201521123004-林艺如)
  5. 人工智能未来读后感 ----by RayKurzweil
  6. 前端性能优化-图像优化
  7. android.os.build修改,Android的os.BuildID对应的SDK版本号以及SDK版本号与APILevel对应关系.docx...
  8. Mr.J--蓝桥杯--去注释
  9. Spark之SparkStreaming理论篇
  10. PostGreSql工作笔记003---在Navicat中创建数据库时报错rolcatupdate不存在_具体原因看其他博文_这里使用pgAdmin4创建管理postgre
  11. MFC程序打包为安装文件方法
  12. 由UIview获得其controller
  13. 多示例代码:go语言中循环练习题,不包括break,continue
  14. Linux基本操作笔记
  15. 2019互联网行业程序员工资大数据报告
  16. Js基础——变量类型和计算
  17. JSOI2008 小店购物
  18. Makefile文件是什么?(一)
  19. 如何检查显卡支持哪个版本的CUDA ?
  20. 五百丁-word模板-推荐简历-top58 下载

热门文章

  1. php工作在fastcgi模式下怎样配置xcache,FastCGI模式编译安装LAMP+XCache
  2. codeIgniter3 学习笔记四(文件上传)
  3. Layui layui-soul-able 组件 表格列进行拖拽
  4. ELK logstash grok匹配失败存另外的es表
  5. git log 查看自己修改的行数_Git 笔记 day2
  6. (已解决)MAC JAVA错误:Cocoa AWT: Not running on AppKit thread 0 when expected
  7. gtk_init参数传递过程(草稿)
  8. 龙芯提供的jna-4.5.2,没有libjnidispatch.so,也能用
  9. 使用jdk提示Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper
  10. TeaVM编译耗时太长,为节省时间,跳过test