看GCN的时候突然觉得自己代码能力太弱,于是想简单实现一个C++的矩阵乘法。
虽然很烂,但是总算能跑通了,结果矩阵存于一个指针数组中,数组中的每一个指针指向矩阵的一行。
#include<iostream>
using namespace std;
// 矩阵乘法函数
float** matrixMultiply(int m, int n, int l,float** a, float** b) {
// 创建结果矩阵
float** result = new float*[m];
for (int i = 0; i < m; i++) {
result[i] = new float[l];
}
// 执行矩阵乘法
float sum = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < l; j++){ //选中a的某一行和b的某一列执行矩阵乘法
sum = 0;
for(int k = 0; k < n; k++){ //对a的行和b的列执行乘法求和运算,共进行n次,得到一个结果
sum += a[i][k]*b[k][j];
}
result[i][j] = sum;
}
}
return result;
}
//矩阵初始化函数
void matrixInitial(int m, int n,float** matrix)
{
for(int i=0;i<m;i++){
matrix[i] = new float[n];
for(int j=0;j<n;j++)
matrix[i][j] = i*n+j+1;
}
}
//矩阵输出函数
void matrixPrint(int m, int n,float** matrix)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
int main()
{
int m = 3,n=2,l=3;
float **matrix1 = new float*[m];
float **matrix2 = new float*[n];
//初始化矩阵,初始化规则是从1开始递增,逐行赋值
matrixInitial(m,n,matrix1);
matrixInitial(n,l,matrix2);
//输出初始化矩阵
cout << "矩阵a:" << endl;
matrixPrint(m,n,matrix1);
cout << "矩阵b:" << endl;
matrixPrint(n,l,matrix2);
//矩阵乘法
float **result = matrixMultiply(3,2,3,matrix1,matrix2);
//输出结果
cout << "矩阵a*b:" << endl;
matrixPrint(m,l,result);
return 0;
}