1.如果不知道什么是矩阵乘法,希望小伙伴先去思考一下矩阵乘法再去看代码,代码中最核心的部分是循环部分,正确的理解中间变量K 非常重要。
2.在正确理解矩阵乘法的基础上,看代码,宏定义的M,N,P,其实是为了让大家更好的理解数组下标行列之间的关系。
3.核心在于,我们将组成一M*P型的矩阵,用两个循环控制M 和P,中间一个变量用来控制第一个数组的列和第二个数组的列,他们是同时变化的,用k来控制
#include<stdio.h>
#define N 2
#define M 3
#define P 2
int main(){
//初始化数组
int a[N][M]={1,2,3,4,5,6};
int b[M][P]={1,2,3,4,5,6};
int c[N][P]={0};//初始化为0很重要,我刚开始没有初始化,数据运行有问题
// 我们把i,j看作是目标数组c的 行下标和列下标,k表示a数组的列和b数组的行,
// 经过推理可以知道,计算时,a的一行的每一个数乘b数组的每一列的每个数,
// 而a[i][k]b[k]b[j]
for (int i = 0; i < N; i++)//从第i行开始,N是目标数组的行
{
for (int j = 0; j < P; j++)//从第j列开始,P是目标数组的列
{
for (int k = 0; k < M; k++)//M是a的列,b的行。
{
c[i][j]=c[i][j]+a[i][k]*b[k][j];//得结果累加
}
}
}
//打印目标数组c
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
printf("%d ",c[i][j]);
}
printf("\n");
}
return 0;
}