设为
的矩阵,
为
的矩阵,那么称
的矩阵
为矩阵
与
的乘积,其中
的第
行第
列元素可以表示为:
注意点:
- 只有矩阵
的列数和矩阵
的行数相同的时候,两个矩阵才能进行乘法
- 矩阵
的行数等于矩阵
的行数,
的列数等于
的列数。
- 乘积
的第
行第
列的元素等于矩阵
的第
行的元素与矩阵
的第
列对应元素乘积之和。
例:
首先,每个位置i,j都要计算一次结果,所以先要有两层循环来控制,然后对于每个位置的结果,需要循环p次,
c++
class Solution {
public:
vector<vector<int> > solve(vector<vector<int> >& a, vector<vector<int> >& b) {
int m = a.size();//A的行数
int p = a[0].size();//A的列数=B的行数
int n = b[0].size();//B的行数
vector<vector<int>> ans(m);
for(int i = 0 ; i < m ; i++)
{
for(int j = 0 ; j < n ; j++)
{
int t = 0;
for(int k = 0 ; k < p ; k++)
{
t+=a[i][k]*b[k][j];
}
ans[i].push_back(t);
}
}
return ans;
}
};java
import java.util.*;
public class Solution {
public int[][] solve (int[][] a, int[][] b) {
// write code here
int m = a.length;//A的行数
int p = a[0].length;//A的列数=B的行数
int n = b[0].length;//B的行数
int[][] ans = new int[m][n];
for(int i = 0 ; i < m ; i++)
{
for(int j = 0 ; j < n ; j++)
{
int t = 0;
for(int k = 0 ; k < p ; k++)
{
t+=a[i][k]*b[k][j];
}
ans[i][j]=t;
}
}
return ans;
}
}python
class Solution:
def solve(self , a , b ):
m = len(a)
p = len(a[0])
n = len(b[0])
ans=[[[] for i in range(m)] for j in range(n)]
for i in range(m):
for j in range(n):
t = 0
for k in range(p):
t=t+a[i][k]*b[k][j]
ans[i][j]=t
return ans;(python numpy模块有相应的函数,不过本题不允许使用
import numpy as np
class Solution:
def solve(self, a, b):
a = np.array(a)
b = np.array(b)
r = np.dot(a, b)
return r.tolist()以上是矩阵乘法的通解,本题是两个n*n的矩阵,也可以把m、p都用n代替(少些几行代码,不过感觉也没必要)
class Solution {
public:
vector<vector<int> > solve(vector<vector<int> >& a, vector<vector<int> >& b) {
int n = a.size();
vector<vector<int>> ans(n);
for(int i = 0 ; i < n ; i++)
{
for(int j = 0 ; j < n ; j++)
{
int t = 0;
for(int k = 0 ; k < n ; k++)
{
t+=a[i][k]*b[k][j];
}
ans[i].push_back(t);
}
}
return ans;
}
};
京公网安备 11010502036488号