1. 矩陣擴(kuò)展算法——簡單的算卷積
接著上文,矩陣進(jìn)行更深入的學(xué)習(xí)就需要學(xué)習(xí)更多的處理了,矩陣被運(yùn)用在很多的領(lǐng)域,這里簡單以計(jì)算機(jī)圖形處理的重要概念——卷積,為例進(jìn)行說明:
卷積。用一個模板去和另一個圖片對比,進(jìn)行卷積運(yùn)算。目的是使目標(biāo)與目標(biāo)之間的差距變得更大。卷積在數(shù)字圖像處理中最常見的應(yīng)用為銳化和邊緣提取,此外,在人工智能中的圖像處理也極為常見,這里的運(yùn)算介紹不提供繁雜的公式(相信短時間內(nèi)也看不懂)使用Zero padding,unit strides(零填充,單位滑動)的計(jì)算方式進(jìn)行舉例。
(圖片來自外國的學(xué)術(shù)論壇datascience)
對于此類計(jì)算,有兩個矩陣a和b,矩陣a是原矩陣,b是卷積核,他們的運(yùn)算過程是,首先對b矩陣進(jìn)行倒置,如:
接著,再將待處理矩陣的部分與卷積核進(jìn)行逐個進(jìn)行相對應(yīng)的運(yùn)算,本例子由于按照邊緣’零’處理的方式,因此邊緣全部按照0進(jìn)行運(yùn)算,如圖運(yùn)算的過程為:0*1+0*2+0*3+0*2+1*1+2*2+0*1+1*2+2*1=9,這樣的一個值計(jì)算完成后,對每一個值再度進(jìn)行運(yùn)算即可。
以卷積核為3*3為例,代碼樣例為:
#include <iostream> 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]; } } //直接以倒置的方式進(jìn)行輸入 for(int i=2;i>=0;i--){ cin>>ker[i][2]>>ker[i][1]>>ker[i][0]; } //卷積運(yùn)算 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; } } //結(jié)果輸出 for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cout<<ans[i][j]<<' '; } cout<<endl; } return 0; }
2. 雜談
從前文的代碼實(shí)現(xiàn)可以看出,矩陣在整個計(jì)算機(jī)中使用非常廣泛,而其實(shí)現(xiàn)方式又無不與二維數(shù)組這個概念相對應(yīng),二維數(shù)組是最簡單的矩陣表示方式,其便利性可以讓我們設(shè)計(jì)出相當(dāng)多的矩陣相關(guān)的算法,與一維的運(yùn)算不同,二維的運(yùn)算無論從理解出發(fā)還是計(jì)算乃至代碼設(shè)計(jì)出發(fā),都復(fù)雜了許多,這就需要充分的數(shù)學(xué)知識做鋪墊,也希望讀者能夠細(xì)細(xì)理解代數(shù)這一門學(xué)科的奧妙。
3.配套習(xí)題
更多題目在題庫中題庫搜索矩陣即可
1097 | 蛇行矩陣 |
1167 | 矩陣 |
1242 | 矩陣轉(zhuǎn)置 |
1412 | 矩陣的冪 |
1472 | 藍(lán)橋杯基礎(chǔ)練習(xí)VIP-矩陣乘法 |
1550 | 藍(lán)橋杯算法提高VIP-矩陣乘方 |
1653 | 藍(lán)橋杯算法訓(xùn)練VIP-矩陣加法 |
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程