矩阵相乘详解

矩阵相乘详解首先要知道矩阵是怎么相乘的首先,两个矩阵要是想相乘需要满足,第一个矩阵的列数等于第二个矩阵的行数满足的话就可以相乘得到新的矩阵了举个例子嗷:矩阵a:123322212矩阵b:223121a矩阵是3*3(3行3列)的矩阵,b矩阵是3*2(3行2列)的矩阵,满足第一个矩阵的列数等于第二个矩阵的行数。那我们就可以相乘了一个m*n的矩阵和一个…

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

首先要知道矩阵是怎么相乘的
在这里插入图片描述
在这里插入图片描述
首先,两个矩阵要是想相乘需要满足,第一个矩阵的列数等于第二个矩阵的行数
满足的话就可以相乘得到新的矩阵了

举个例子嗷:

矩阵a:

1 2 3
3 2 2
2 1 2

矩阵b:

2 2
3 1
2 1

a矩阵是3 * 3(3行3列)的矩阵,b矩阵是3 * 2(3行2列)的矩阵,满足第一个矩阵的列数等于第二个矩阵的行数。那我们就可以相乘了

一个m*n的矩阵和一个n*p的矩阵相乘,将会得到一个m*p的矩阵

相乘得到的矩阵c是3*2的:

14 7
16 10
11 7

其实就是矩阵a的第一行每个元素分别与b的第一列相乘再求和,得到c矩阵的第一个数,然后a矩阵的第一行再与b矩阵的第二列相乘,得到第二个数,然后是a矩阵的第二行与b矩阵的第一列…

不明白的看下边吧:

1 * 2 + 2 * 3 + 3 * 2 = 14
1 * 2 + 2 * 1 + 3 * 1 = 7
3 * 2 + 2 * 3 + 2 * 2 = 16
3 * 2 + 2 * 1 + 2 * 1 = 10
2 * 2 + 1 * 3 + 2 * 2 = 11
2 * 2 + 1 * 1 + 2 * 1 = 7


好了,懂了怎么相乘就来看题吧…

先看这道题…

题目描述
矩阵A规模是n×m,矩阵B规模是m×p,现在需要你求A*B

输入
输入n,m。然后输入n×m的矩阵。

输入p,然后输入m×p的矩阵。

1<=n,m,p<=100

-10000<=矩阵元素<=10000

输出
输出相乘后的n×p的矩阵

样例输入
2 3
1 2 3
3 2 1
2
1 1
2 2
3 3
样例输出
14 14
10 10

#include<iostream>
#include<cstring>
using namespace std;
int main()
{ 
   
    int a[110][110]={ 
   };
    int b[110][110]={ 
   };
    int c[110][110]={ 
   };
    
    int n=0,m=0,p=0;
    cin>>n>>m;//矩阵a为n*m(n行m列) 
	for(int i=0;i<n;i++)
	  for(int j=0;j<m;j++)
	    scanf("%d",&a[i][j]);
		
    cin>>p;  //矩阵b为m*p(m行p列)
    for(int i=0;i<m;i++)
	  for(int j=0;j<p;j++)
	    scanf("%d",&b[i][j]);	
		
    for(int i=0;i<n;i++)   //矩阵c是a与b相乘得到的 
	  for(int j=0;j<p;j++) //n*p(n行p列) 
	    for(int k=0;k<m;k++)
		  c[i][j]+=a[i][k]*b[k][j];
		  
	for(int i=0;i<n;i++)
	{ 
   
		for(int j=0;j<p;j++)
	     cout<<c[i][j]<<" ";
		cout<<endl; 
	}
	return 0;   	  		   		 
}

这一题根上面那一道没什么区别…

L1-048 矩阵A乘以B (15分)
给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有R​a行、C​a​​ 列,B有R​b 行、C​b​​ 列,有C​a​与R​b 相等时,两个矩阵才能相乘。

输入格式:
输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。

输出格式:
若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出Error: Ca != Rb,其中Ca是A的列数,Rb是B的行数。

输入样例1:
2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8

输出样例1:
2 4
20 22 24 16
53 58 63 28

输入样例2:
3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72

输出样例2:
Error: 2 != 3

#include<iostream>
using namespace std;
int main()
{ 
   
	int a[105][105]={ 
   };
	int b[105][105]={ 
   };
	int c[105][105]={ 
   };
	
	int n=0,m=0,p=0,q=0;
	cin>>n>>m;
	for(int i=0;i<n;i++)
	  for(int j=0;j<m;j++)
	     scanf("%d",&a[i][j]);
	     
	cin>>p>>q;
	for(int i=0;i<p;i++)
	  for(int j=0;j<q;j++)
	     scanf("%d",&b[i][j]);     
	     
	if(m!=p)
	cout<<"Error: "<<m<<" != "<<p;
	else
	{ 
   
		cout<<n<<" "<<q<<endl;
		for(int i=0;i<n;i++)
		  for(int j=0;j<q;j++)
		    for(int k=0;k<m;k++)
		      c[i][j]+=a[i][k]*b[k][j];
	    
		for(int i=0;i<n;i++)
		{ 
   
			for(int j=0;j<q;j++)
			{ 
   
				if(j==q-1)
				cout<<c[i][j];   //注意每行最后一个数字后没有空格 
				else
				cout<<c[i][j]<<" ";
			}
			if(i!=n-1)
			cout<<endl;
		}	  		  	
	}
	return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • 原生table样式示例_table好看的css样式

    原生table样式示例_table好看的css样式<div><divclass=”ui-table-head”><tableclass=”ui-table”><colgroup><colstyle=”width:10%”><colstyle=”width:55%”>.

    2022年9月15日
    0
  • OpenCV-Python教程(8、Canny边缘检测)

    OpenCV-Python教程(8、Canny边缘检测)本篇文章介绍如何用OpenCV-Python来使用Canny算子。提示:转载请详细注明原作者及出处,谢谢!本文介绍使用OpenCV-Python实现基本的滤波处理本文不介详细的理论知识,读者可从其他资料中获取相应的背景知识。笔者推荐清华大学出版社的《图像处理与计算机视觉算法及应用(第2版)》。原型OpenCV-Python中Canny函数的原型为:edge

    2022年5月30日
    35
  • PHP实现一个简单的图书管理系统

    PHP实现一个简单的图书管理系统刚刚我收到了一个消息,老师竟然布置了一个课设,要求做一个后台管理系统。做归做,但是!本着为老师节省时间的心态,我花了大量的时间,消耗了无数脑细胞扫描了一遍老师给的课题,最终掐指一算选了一个最简单的——&gt;"图书管理系统"。刚开始我的想法是用jsp+(struts2+spring+hibernate)+Oracle写的,毕竟以前也用这玩意写过类似的东西,等我打开Oracl…

    2022年5月31日
    33
  • 第六章 zookeeper 原理,安装步骤,数据同步演示

    第六章 zookeeper 原理,安装步骤,数据同步演示第六章 zookeeper 原理,安装步骤,数据同步演示

    2022年4月23日
    65
  • 如何理解css中的float

    最近一段时间一直在为一个即将上线的新站进行一些前端开发。自然,对CSS的使用是必不可少的了。我们在CSS中很多时候会用到浮动来布局。常见的有float:left或者float:right。简单点来说,

    2021年12月20日
    50
  • B样条曲线拟合原理「建议收藏」

    B样条曲线拟合原理「建议收藏」1.与贝塞尔曲线对比B样条曲线是在Bezier曲线基础上发展起来的一类曲线,它克服了Bezier曲线整体控制性所带来的不便,最常用的是二次和三次B样条曲线。2.二次B样条2.1参数方程已知三个平面离散点P0、P1、P2,由这三点可以定义二次抛物线段,其参数矢量方程形式为:二次B样条曲线参数方程的矩阵形式为:对比着看,

    2022年6月18日
    64

发表回复

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

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