转自:
https://blog.youkuaiyun.com/cxc19890214/article/details/45363267/
https://blog.youkuaiyun.com/yang20141109/article/details/51024373
方法一:数组实现:
- #include<iostream>
- using namespace std;
- #define SIZE_M 2
- #define SIZE_N 3
- #define SIZE_S 4
- int main(){
- int matrix_a[SIZE_M] [SIZE_N]={{1,2,3},{4,5,6}};//a矩阵2X3
- int matrix_b[SIZE_N] [SIZE_S]={{1,2,3,4},{5,6,7,8},{1,2,3,4}};//b矩阵3X4
- int matrix_result[SIZE_M][SIZE_S];//结果矩阵2X4
- for(int m=0;m<SIZE_M;m++){
- for(int s=0;s<SIZE_S;s++){
- matrix_result[m][s]=0;//变量使用前记得初始化,否则结果具有不确定性
- for(int n=0;n<SIZE_N;n++){
- matrix_result[m][s]+=matrix_a[m][n]*matrix_b[n][s];
- }
- }
- }
- for(int m=0;m<SIZE_M;m++){
- for(int s=0;s<SIZE_S;s++){
- cout<<matrix_result[m][s]<<"\t";
- }
- cout<<endl;
- }
- return 0;
- }
方法二:vector实现
- #include<iostream>
- #include<vector>
- using namespace std;
- vector<vector<int>> matrix_multiply(vector<vector<int>> arrA, vector<vector<int>> arrB)
- {
- //矩阵arrA的行数
- int rowA = arrA.size();
- //矩阵arrA的列数
- int colA = arrA[0].size();
- //矩阵arrB的行数
- int rowB = arrB.size();
- //矩阵arrB的列数
- int colB = arrB[0].size();
- //相乘后的结果矩阵
- vector<vector<int>> res;
- if (colA != rowB)//如果矩阵arrA的列数不等于矩阵arrB的行数。则返回空
- {
- return res;
- }
- else
- {
- //设置结果矩阵的大小,初始化为为0
- res.resize(rowA);
- for (int i = 0; i < rowA; ++i)
- {
- res[i].resize(colB);
- }
- //矩阵相乘
- for (int i = 0; i < rowA; ++i)
- {
- for (int j = 0; j < colB; ++j)
- {
- for (int k = 0; k < colA; ++k)
- {
- res[i][j] += arrA[i][k] * arrB[k][j];
- }
- }
- }
- }
- return res;
- }
- int main(void)
- {
- vector<vector<int>> arrA = { { 2, 1 }, { 4, 3 } };
- vector<vector<int>> arrB = { { 1, 2 }, { 1, 0 } };
- //vector<vector<int>> arrA = { { 1, 2, 3 }, { 4, 5, 6 } };
- //vector<vector<int>> arrB = { { 1, 4 }, { 2, 5 }, { 3, 6 } };
- vector<vector<int>> res = matrix_multiply(arrA, arrB);
- system("pause");
- return 0;
- }