實現兩個N N矩陣的乘法,矩陣由一維陣列表示

2021-10-08 13:33:33 字數 551 閱讀 3176

1. 簡述

注意下標、引數傳遞。只要把二維中下標,轉化為一維陣列的下標即可。

2. 核心**

二維的公式是:c[i][j] += a[i][k] * b[k][j], k=0,1,2,...,n-1

一維的公式:   c[i*n+j] += a[i*n+k] * b[k*n+j], k=0,1,2,...,n-1

template

void maxtrixmultiply(const t* a,const t* b, t* c, unsigned int n) {

for(int i=0; i**中,為了減少乘法次數,首先計算矩陣a,b,c的下標,然後在迴圈通過加法,更新a和b的下標。空間換時間,減少了計算下標所用的時間。

3. 備註

矩陣相乘是可以優化的,斯特拉森演算法就可以把時間複雜度降低到n^(log7),不過原始演算法是需要假設n是2的冪,而且實現中,需要分塊,如果對一維數值進行分塊的話,實現起來反而會增加時間和空間的負擔。對於斯特拉森演算法以後有機會再看了,今天就到這裡。

4. 參考

矩陣相乘演算法_c語言空間    

實現兩個N N矩陣的乘法,矩陣由一維陣列表示

實現兩個n n矩陣的乘法,矩陣由一維陣列表示。先介紹一下矩陣的加法 1 void add int rows,int cols 2 8 若兩個矩陣要做乘法運 只有在乙個矩陣的行數與另乙個矩陣的列數相同時,才能做兩個矩陣的乘法。如何得到矩陣的轉置 矩陣的轉置也是乙個矩陣,原始矩陣中的行轉變為轉置矩陣的列...

實現兩個N N矩陣的乘法,矩陣由一維陣列表示

實現兩個n n矩陣的乘法,矩陣由一維陣列表示。先介紹一下矩陣的加法 1 void add int rows,int cols 2 8 若兩個矩陣要做乘法運 只有在乙個矩陣的行數與另乙個矩陣的列數相同時,才能做兩個矩陣的乘法。如何得到矩陣的轉置 矩陣的轉置也是乙個矩陣,原始矩陣中的行轉變為轉置矩陣的列...

實現兩個N N矩陣的乘法,矩陣由一維陣列表示

實現兩個n n矩陣的乘法,矩陣由一維陣列表示。先介紹一下矩陣的加法 1 void add int rows,int cols 2 8 若兩個矩陣要做乘法運 只有在乙個矩陣的行數與另乙個矩陣的列數相同時,才能做兩個矩陣的乘法。如何得到矩陣的轉置 矩陣的轉置也是乙個矩陣,原始矩陣中的行轉變為轉置矩陣的列...