#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;
}
矩阵的基本操作
于 2024-08-07 17:40:08 首次发布