c++ - LAPACK 矩阵乘法与 C++

标签 c++ linear-algebra blas

我是 C++ 的新手,正在尝试使用 LAPACK 库进行矩阵乘法。 我尝试运行下面给出的例程 dgemm。我期待输出 A*B。但每次我得到的答案都是 B*A。这是例程的工作方式还是我的代码有任何问题。

我的代码:

#include "stdafx.h"
#include<iostream>

using namespace std;

extern "C" void dgemm_(const char *TRANSA, const char *TRANSB, const int *M, const int *N, const int *K, double *ALPHA, double *A, const int *LDA, double *B, const int *LDB, double *BETA, double *C, const int *LDC);

int main(void)
{
    double A[4] = {1,2,3,4};
    double B[4] = {5,6,7,8};
    char TRANS = 'N';
    int M = 2;
    int N = 2;
    int K = 2;
    double ALPHA = 1.0;
    int LDA = 2;
    int LDB = 2;
    double BETA = 0.0;
    double C[4];
    int LDC = 2;

    dgemm_(&TRANS, &TRANS, &M, &N, &K, &ALPHA, A, &LDA, B, &LDB, &BETA, C, &LDC);

    cout << C[0] << endl;
    cout << C[1] << endl;
    cout << C[2] << endl;
    cout << C[3] << endl;
    getchar();
    return 0;
}

任何输入都会非常有帮助。

最佳答案

我没有研究你调用 dgemm 的细节,我不知道你是如何解释结果矩阵的。但是您似乎很可能在某处混淆了 col major 和 row major 的解释。计算很可能使用 col major,但您假设是 row major。

关于c++ - LAPACK 矩阵乘法与 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15830913/

相关文章:

c++ - Linux进程间可重入信号量

python - 查找相机矩阵的翻译

blas - blas中incx和incxy是什么意思?

macports - OSX Mavericks ATLAS 从源和 Macports 安装失败

c++ - Armadillo 可以在 Mat<float> 上执行 eig_gen 吗?

c++ - 从 cmake 在 VS 2013 中启用 C++11 支持

c++ - 使用结构中的成员进行动态分配

c++ - 在 C++ 中创建和显示十六进制字符串

python - 将这个矩阵方程转换成 numpy 可以理解的东西

python - 使用 scipy.linalg.lstsq 的点集的最佳拟合平面结果错误?