矩阵相乘详解

矩阵相乘详解首先要知道矩阵是怎么相乘的首先,两个矩阵要是想相乘需要满足,第一个矩阵的列数等于第二个矩阵的行数满足的话就可以相乘得到新的矩阵了举个例子嗷:矩阵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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WebStorm使用 webstorm快捷键

    WebStorm使用 webstorm快捷键WebStormWebStorm是JetBrains推出的一款商业的 JavaScript 开发工具任何一个编辑器都需要保存(ctrl+s),这是所有win平台上编辑类软件的特点,但是webstorm编辑文件右上角是没有那个熟悉的*的。好处:省去了ctrl+s之后,在结合Firefox的vim,基本不动鼠标就可以看到结果页面了。 坏处:没有以前的*

    2022年6月23日
    38
  • ResNet+FPN实现+白嫖代码「建议收藏」

    ResNet+FPN实现+白嫖代码「建议收藏」===========================================================有现成的代码:https://github.com/Kongsea/FPN_TensorFlow推荐根据该博客来学习:https://www.jianshu.com/p/324af87a11a6============================================================纸上得来终觉浅,须知此事要coding!ResNet+FPN

    2022年5月4日
    87
  • 如何快速搭建图片服务器[通俗易懂]

    前言最近学习一个分布式集群的项目,正常一般的工程是把图片放在web项目的自身服务器的工程中,但在集群环境下,会出现找不到图片的情况。代码参考:https://github.com/zyjcxc/taotao.git比如:解决办法:linux做磁盘的映射,说能解决,但服务器多了也不好弄,所以可以再搭建一个图片服务器图片服务器两个服务:http:可以使用nginx…

    2022年4月10日
    59
  • 数据库导出表结构语句_sqlserver导出表结构

    数据库导出表结构语句_sqlserver导出表结构第一种:利用sql语句查询需要说明的是该方法应该适用很多工具,博主用的是navicatSELECTTABLE_NAME表名,COLUMN_NAME列名,COLUMN_TYPE数据类型,DATA_TYPE字段类型,CHARACTER_MAXIMUM_LENGTH长度,IS_NULLABLE是否为空…

    2025年9月8日
    8
  • 哪些线程是安全的_redis是线程安全的吗

    哪些线程是安全的_redis是线程安全的吗Java中平时用的最多的map就是hashmap但是它却是线程不安全的。那除了hashmap还有哪些常见的线程安全的map?1.hashtableMap<String,Object>hashtable=newHashtable<String,Object>();这是所有人最先想到的,那为什么她是线程安全的?那就看看她的源码,我们可以看出我们常用的put,get,…

    2022年4月20日
    42
  • Wix 安装部署教程(七) 获取管理员权限

    Wix 安装部署教程(七) 获取管理员权限

    2022年4月2日
    98

发表回复

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

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