矩阵的基本操作

#include<iostream>
#include<string>
#include<cmath>
#include<cstring>
#include <iomanip> 
using namespace std;
template <size_t rows,size_t cols>
void display_matrix(int (&a)[rows][cols])
{
	for(size_t i=0;i<rows;i++)
	{
		for(size_t j=0;j<cols;j++)
		 cout<<setw(3)<<a[i][j]<<" ";
		cout<<endl;
	}
	cout<<endl;
}
void get_matrix_multiple()
{
	//矩阵乘法实现
	//m1:axb m2:bxc
	//int a[2][3];
	//int b[3][4];
	//输入矩阵
	//for(int i=0;i<2;i++) for(int j=0;j<3;j++) cin>>a[i][j];
	//for(int i=0;i<3;i++) for(int j=0;j<4;j++) cin>>b[i][j];
	int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 2x3 矩阵
    int b[3][4] = {{7, 8, 9, 10}, {11, 12, 13, 14}, {15, 16, 17, 18}}; // 3x4 矩阵
	//打印矩阵
	display_matrix(a);
	display_matrix(b);
	//实现矩阵乘法
	int row1=2;
	int col1=3;
	int col2=4; //axb:2x3 3x4 =2x4
	int ans[2][4];
	memset(ans,0,sizeof(ans));
	for(int i=0;i<row1;i++)
	{
		for(int j=0;j<col2;j++)
		{
			for(int k=0;k<col1;k++)
			{
				ans[i][j]+=a[i][k]*b[k][j];
			}
		}
	}
	display_matrix(ans);
	
 } 
void get_matrix_add()
{
	//矩阵加法实现
	//m1:axb m2:bxc
	//int a[2][3];
	//int b[2][3];
	//输入矩阵
	//for(int i=0;i<2;i++) for(int j=0;j<3;j++) cin>>a[i][j];
	//for(int i=0;i<3;i++) for(int j=0;j<4;j++) cin>>b[i][j];
	int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 2x3 矩阵
    int b[2][3] = {{7, 8, 9}, {11, 12,13}}; // 3x4 矩阵
	//打印矩阵
	display_matrix(a);
	display_matrix(b);
	//实现矩阵加法
	int row=2;
	int col=3;
	int ans[2][3];
	memset(ans,0,sizeof(ans));
	for(int i=0;i<row;i++)
	{
		for(int j=0;j<col;j++)
		{
			ans[i][j]=a[i][j]+b[i][j]; 
		}
	}
	display_matrix(ans);
	
}

void get_matrix_subtract()
{
	//矩阵加法实现
	//m1:axb m2:bxc
	//int a[2][3];
	//int b[2][3];
	//输入矩阵
	//for(int i=0;i<2;i++) for(int j=0;j<3;j++) cin>>a[i][j];
	//for(int i=0;i<3;i++) for(int j=0;j<4;j++) cin>>b[i][j];
	int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 2x3 矩阵
    int b[2][3] = {{7, 8, 9}, {11, 12,13}}; // 3x4 矩阵
	//打印矩阵
	display_matrix(a);
	display_matrix(b);
	//实现矩阵减法
	int row=2;
	int col=3;
	int ans[2][3];
	memset(ans,0,sizeof(ans));
	for(int i=0;i<row;i++)
	{
		for(int j=0;j<col;j++)
		{
			ans[i][j]=a[i][j]-b[i][j]; 
		}
	}
	display_matrix(ans);
	
}
//
const int MAXN=105;
int p[MAXN][MAXN]={0};
int ans[MAXN][MAXN]={0};
void get_matrix_conv()
{
	//矩阵与卷积 
	//int p[4][4] = {{1, 2, 3,4},{1, 2, 3,4},{1, 2, 3,4},{1, 2, 3,4}}; // 4x4 矩阵
    int n=4;
	int m=4;
	//测试输入:1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>p[i][j];
    //打印p矩阵 
    for(int i=1;i<=n;i++)
    {
    	for(int j=1;j<=m;j++)
		 cout<<setw(3)<<p[i][j]<<" ";
		cout<<endl;
	}
	cout<<endl;
	int k[3][3] = {{1, 2, 1}, {2, 1,2},{1,2,1}}; // 卷积 
	//打印卷积矩阵 
	display_matrix(k);
	//超出的地方用0进行填充
    //conv计算 
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			int temp=0;
			for(int a=0;a<3;a++)
		      for(int b=0;b<3;b++)
			  {
				temp+=(k[a][b]*p[i-1+a][j-1+b]); 
			  }
			ans[i][j]=temp;
		}
	}
	//打印结果矩阵 
    for(int i=1;i<=n;i++)
    {
    	for(int j=1;j<=m;j++)
		 cout<<setw(3)<<ans[i][j]<<" ";
		cout<<endl;
	}
	cout<<endl;
}
int main()
{
	cout<<"************矩阵乘法实现************"<<endl; 
	get_matrix_multiple();
	cout<<"************矩阵加法实现************"<<endl; 
	get_matrix_add(); 
	cout<<"************矩阵减法实现************"<<endl; 
	get_matrix_subtract();
	cout<<"************矩阵卷积实现************"<<endl; 
	get_matrix_conv();
	cout<<"************************************"<<endl; 
	return 0; 
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温柔济沧海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值