【问题标题】:zgemm's conjugate transpose option does not seem to workzgemm 的共轭转置选项似乎不起作用
【发布时间】:2014-02-26 14:57:59
【问题描述】:

我正在尝试使用 C 中 BLAS 库的 zgemm 函数将复数向量乘以复数矩阵。

这是我正在使用的代码:

void dot(complexArray* mat1, char transa, complexArray* mat2, char transb, complexArray* out)
{
ptrdiff_t m = (ptrdiff_t)mat1->m;
ptrdiff_t n = (ptrdiff_t)mat2->n;
ptrdiff_t k = (ptrdiff_t)mat1->n;

ptrdiff_t lda = (ptrdiff_t)mat1->m;
ptrdiff_t ldb = (ptrdiff_t)mat2->m;
ptrdiff_t ldc = (ptrdiff_t)out->m;

//scalar factors
double alpha[2] = {1,0};
double beta[2] = {0,0};

//BLAS routine for complex matrix multiplication
zgemm(&transa, &transb, &m, &n, &k, alpha, mat1->data, &lda, mat2->data, 
        &ldb, beta, out->data, &ldc);
}

complexArray 结构体定义如下:

typedef struct
{
double* data;
size_t m;
size_t n;
} complexArray;

但是,如果我调用点函数

dot(array1, 'C', array2, 'N', resultArray);

其中 array1.m == r,array1.n == 1 和 array2.m == array2.n == r,我收到类似的东西

216692908932268360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000 + 4451969616001722900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000i    

由于对变量 transa(当然对于不同形状的向量/矩阵组合)也使用带有参数“N”的相同函数,我担心我误解了 transa 参数。有什么提示可以定位错误吗?

【问题讨论】:

  • 并且outdata 已正确分配?
  • 我会这么说:所有 complexArray 数据都以相同的方式分配:$data = (double*)mxMalloc(2*m*n*sizeof(double));$.在这种情况下,m==n==1;因此,为了存储结果的实部和虚部,分配了一个具有两个字段的双精度数组。

标签: c matrix-multiplication complex-numbers blas


【解决方案1】:

好的,我想我已经在 BLAS 函数的 FORTRAN 文档中找到了答案(参见例如dgemm documentation:

参数 M、N 和 K(在我的例子中是 m、n 和 k)不是指原始矩阵的行和列,而是指最终使用的矩阵,即转置矩阵或共轭矩阵。因此,如果您对 TRANSA 或 TRANSB 参数使用“T”或“C”选项,请确保您还分别交换了 M 和 N 或 N 和 K。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2011-10-11
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多