二维矩阵乘法,转为1维的数据,计算更快,同时计算中用r来表示A[i,k],更快
void ddot(float* A, const float*B, int n, int m, int p, float* C){
// A (2,8) B(8,2)
// n =2,m=8, p=2
// i*8 ROW_IN_LINE [ROW1 8;ROW2 8,]
float r = 1.f;
for (int i = 0; i < n; ++i){
for (int k = 0; k < m; ++k){
r = A[i*m+k];
for (int j = 0; j < p; ++j){
C[j*n + i] += r* B[j*m+k];
}
}
}
}
void cdot(float* A, const float*B, int n, int m, int p, float* C){
// A (2,8) B(8,2)
// n =2,m=8, p=2
// i*8 ROW_IN_LINE [ROW1 8;ROW2 8,]
float r = 1.f;
for (int i = 0; i < n; ++i){
for (int k = 0; k < m; ++k){
r = A[i*m + k];
for (int j = 0; j < p; ++j){
C[i*p + j] += r* B[k*p+j];
}
}
}
}
void tdot(float* A, const float*B, int n, int m, int p, float* C){
// At * B
// At (2,8) B(8,2)
// n =2,m=8, p=2
float r = 1.f;
for (int i = 0; i < n; ++i){
for (int k = 0; k < m; ++k){
r = A[k*n + i];
for (int j = 0; j < p; ++j){
C[i*p + j] += r* B[k*p + j];
}
}
}
}
void main(){
float A[4]={1, 2, 3, 1};
float B[4] = { 2, 1, 3, 2 };
float C[4] = { 0, 0, 0, 0 };
cdot(A,B,2,2,2,C);
cout << C[0] << " " << C[1] << " " << C[2] << " " << C[3] << endl;
getchar();
}
输出为 8 5 9 5
用python验算一下