#数组元素相乘_C++ 矩阵相乘
矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列(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++ 矩阵相乘相关推荐
- matlab三维数组与二维矩阵相乘问题
Matlab三维数组与二维矩阵相乘问题 近来在搞一个改进近场music算法的仿真问题,用matlab进行二维搜索的时候写了很多for循环,导致运行速度极慢.考虑到matlab语言本身的矩阵运算特点,改 ...
- pytorch元素相乘_PyTorch 对应点相乘、矩阵相乘实例
一,对应点相乘,x.mul(y) ,即点乘操作,点乘不求和操作,又可以叫作Hadamard product:点乘再求和,即为卷积 data = [[1,2], [3,4], [5, 6]] tenso ...
- Pytorch——对应点相乘和矩阵相乘
1. 点乘,对应元素相乘,不求和 import torcha = torch.Tensor([[1,2], [3,4], [5,6]]) b1 = a.mul(a)// b2=a*a b1 Out[7 ...
- PyTorch 对应点相乘、矩阵相乘
一,对应点相乘,x.mul(y) ,即点乘操作,点乘不求和操作,又可以叫作Hadamard product:点乘再求和,即为卷积 >>> a = torch.Tensor([[1,2 ...
- C和指针之数组编程练习5 (矩阵相乘)
1.问题 5.如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C.这个矩阵的每个元素是由下面的公式决定的: 例如: 结果矩阵中14这个值是通过2×-2加上- ...
- Hadoop 2.6 使用Map Reduce实现矩阵相乘2 矩阵相乘
项目地址:https://github.com/tudoupaisimalingshu/hadoop_matrix 一.首先将右侧矩阵进行转置(点击打开) 二.然后进行相乘运算 1.将右侧转置矩阵缓存 ...
- matlab 多个矩阵相乘,两矩阵相乘
请教各路大神!请问大家,我的两个矩阵怎么相乘啊?我的代码怎么都运行不起.能否请知道的大神帮我看看代码哪里有问题?拜托!! clear k1 = 0.289; k2 = 0.793/5000; k3 = ...
- python矩阵乘法 点乘_Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Tensorflow二维.三维.四维矩阵运算(矩阵相乘,点乘,行/列累加) 1. 矩阵相乘 根据矩阵相乘的匹配原则,左乘矩阵的列数要等于右乘矩阵的行数. 在多维(三维.四维)矩阵的相乘中,需要最后两维 ...
- C++两个矩阵相乘代码(内附有矩阵相乘的条件与规则,以及对代码的详细解答)
再复制粘贴代码之前可以先了解学习一下什么是矩阵相乘,矩阵相乘的条件与规则又是什么. 点击一下链接即可进入学习: #矩阵相乘的学习链接 以下是两个矩阵相乘的代 ...
- python数组对应元素相乘_python的几种矩阵相乘的公式详解
1. 同线性代数中矩阵乘法的定义: np.dot() np.dot(A, B):对于二维矩阵,计算真正意义上的矩阵乘积,同线性代数中矩阵乘法的定义.对于一维矩阵,计算两者的内积.见如下Python代码 ...
最新文章
- 第十一篇:Discourse 话语/论述
- 有关sql server 2000的数据类型
- mysql插入ㄖ_原生JavaScript代码100个实例
- java课程设计 成绩_Java课程设计—学生成绩管理系统(201521123004-林艺如)
- 人工智能未来读后感 ----by RayKurzweil
- 前端性能优化-图像优化
- android.os.build修改,Android的os.BuildID对应的SDK版本号以及SDK版本号与APILevel对应关系.docx...
- Mr.J--蓝桥杯--去注释
- Spark之SparkStreaming理论篇
- PostGreSql工作笔记003---在Navicat中创建数据库时报错rolcatupdate不存在_具体原因看其他博文_这里使用pgAdmin4创建管理postgre
- MFC程序打包为安装文件方法
- 由UIview获得其controller
- 多示例代码:go语言中循环练习题,不包括break,continue
- Linux基本操作笔记
- 2019互联网行业程序员工资大数据报告
- Js基础——变量类型和计算
- JSOI2008 小店购物
- Makefile文件是什么?(一)
- 如何检查显卡支持哪个版本的CUDA ?
- 五百丁-word模板-推荐简历-top58 下载
热门文章
- php工作在fastcgi模式下怎样配置xcache,FastCGI模式编译安装LAMP+XCache
- codeIgniter3 学习笔记四(文件上传)
- Layui layui-soul-able 组件 表格列进行拖拽
- ELK logstash grok匹配失败存另外的es表
- git log 查看自己修改的行数_Git 笔记 day2
- (已解决)MAC JAVA错误:Cocoa AWT: Not running on AppKit thread 0 when expected
- gtk_init参数传递过程(草稿)
- 龙芯提供的jna-4.5.2,没有libjnidispatch.so,也能用
- 使用jdk提示Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper
- TeaVM编译耗时太长,为节省时间,跳过test