C语言矩阵乘法

二维矩阵乘法,转为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验算一下
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值