两个矩阵相乘算法

两个矩阵相乘算法本来是处理两个矩阵的连乘求如何加括号使得中间的运算次数最少的问题,但是突然想到实现一下如何求连个矩阵连乘的算法,就

矩阵相乘需要前面矩阵的行数与后面矩阵的列数相同方可相乘。

第一步先将前面矩阵的每一行分别与后面矩阵的列相乘作为结果矩阵的行列。

第二步算出结果即可。

扩展资料:

矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。

1、当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。

2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。

3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

参考资料:百度百科-矩阵相乘

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-09-29
两个矩阵相乘算法
本来是处理两个矩阵的连乘求如何加括号使得中间的运算次数最少的问题,但是突然想到实现一下如何求连个矩阵连乘的算法,就实现了一下,挺简单的:

注意程序围绕的思想:
1.两个矩阵相乘,前一个矩阵的列等于一个矩阵的行
2.拿前一个矩阵的每一行,依次的乘以后一个矩阵的每一列
[cpp] view plain copy

#include<iostream>
//注意矩阵连乘需要满足的是:
//前一个矩阵的列等于后一个矩阵的行
using namespace std;
int main(){
int a[3][1] = {
{1},
{2},
{3}
};
int b[1][3] = {{1,2,3}};
int c[3][3];
int temp;
for (int i=0; i<3; i++){ //拿出数组a的每一行
for (int z=0; z<3; z++){ //分别和数组b的每一列进行相乘
int sum = 0; //因为每次乘以数组a的每一列都会产生数组c中的一个元素,所以sum要放在这里
for(int j=0; j<1; j++){
sum = a[i][j] * b[j][z];
}
c[i][z] = sum;
}
}

for (int i=0; i<3; i++){
for (int j=0; j<3; j++)
cout << c[i][j];
cout << endl;
}
}本回答被网友采纳
相似回答