字母分块矩阵c语言,矩阵的扩展算法

1. 矩阵扩展算法——简单的算卷积

接着上文,矩阵进行更深入的学习就需要学习更多的处理了,矩阵被运用在很多的领域,这里简单以计算机图形处理的重要概念——卷积,为例进行说明:

卷积。用一个模板去和另一个图片对比,进行卷积运算。目的是使目标与目标之间的差距变得更大。卷积在数字图像处理中最常见的应用为锐化和边缘提取,此外,在人工智能中的图像处理也极为常见,这里的运算介绍不提供繁杂的公式(相信短时间内也看不懂)使用Zero padding,unit strides(零填充,单位滑动)的计算方式进行举例。

521cbe415ec89e818796685a5fc10821.png

(图片来自外国的学术论坛datascience)

对于此类计算,有两个矩阵a和b,矩阵a是原矩阵,b是卷积核,他们的运算过程是,首先对b矩阵进行倒置,如:

6a7009da04b9452dc072bc482a16f4ab.png

接着,再将待处理矩阵的部分与卷积核进行逐个进行相对应的运算,本例子由于按照边缘’零’处理的方式,因此边缘全部按照0进行运算,如图运算的过程为:0*1+0*2+0*3+0*2+1*1+2*2+0*1+1*2+2*1=9,这样的一个值计算完成后,对每一个值再度进行运算即可。

c1f7f40f46f9a93980add8d653cf264b.png

以卷积核为3*3为例,代码样例为:#include 

using namespace std;

const int maxn = 105;

int n,m;

int org[maxn][maxn]={0};

int ker[3][3]={0};

int ans[maxn][maxn]={0};

int main(){

cin>>n>>m;

//待处理的矩阵

for(int i=1;i<=n;i++){

for(int j=1;j<=m;j++){

cin>>org[i][j];

}

}

//直接以倒置的方式进行输入

for(int i=2;i>=0;i--){

cin>>ker[i][2]>>ker[i][1]>>ker[i][0];

}

//卷积运算

for(int i=1;i<=n;i++){

for(int j=1;j<=m;j++){

int tmp=0;

for(int a=0;a<3;a++){

for(int b=0;b<3;b++){

tmp += (ker[a][b] * org[i-1+a][j-1+b]);

}

}

ans[i][j]=tmp;

}

}

//结果输出

for(int i=1;i<=n;i++){

for(int j=1;j<=m;j++){

cout<

}

cout<

}

return 0;

}

2. 杂谈

从前文的代码实现可以看出,矩阵在整个计算机中使用非常广泛,而其实现方式又无不与二维数组这个概念相对应,二维数组是最简单的矩阵表示方式,其便利性可以让我们设计出相当多的矩阵相关的算法,与一维的运算不同,二维的运算无论从理解出发还是计算乃至代码设计出发,都复杂了许多,这就需要充分的数学知识做铺垫,也希望读者能够细细理解代数这一门学科的奥妙。

3.习题

更多题目在题库中题库搜索矩阵即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值