使用 GSL 的矩阵乘法
Matrix Multiplication Using GSL
我有两个 GSL 矩阵,AT
和 A
:
gsl_matrix *A; /* coefficient matrix A */
gsl_matrix *AT; /* coefficient matrix A' */
AT = gsl_matrix_alloc(nc, nr); /* Data matrix */
A = gsl_matrix_alloc(nr, nc); /* Data matrix */
/* Initialize A */
for(i = 0; i < nr; i++){
gsl_matrix_set(A, i, 0, 1.0);
}
for(i = 0; i < nr; i++){
for(j = 1; j < nc; j++){
gsl_matrix_set(A, i, j, 1.0 / (double)(i + j + 1));
}
}
gsl_matrix_transpose_memcpy(AT, A);
我想将这些矩阵相乘并将结果存储在矩阵 ATA
中,但我无法理解 GSL BLAS 文档。
我已经初始化了 ATA
矩阵:
gsl_matrix *ATA; /* coefficient matrix A'A */
ATA = gsl_matrix_alloc(nc, nc); /* Data matrix */
我看到我可以使用 gsl_blas_zgemm
来乘以复杂的矩阵,但这些矩阵并不复杂。我该怎么做?
更新
我试过:
gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, A, AT, 0.0, ATA);
它导致了以下错误:
gsl: blas.c:1354: ERROR: invalid length
Default GSL error handler invoked.
Aborted (core dumped)
我正在将矩阵向后相乘。正确的行是:
gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, AT, A, 0.0, ATA);
我有两个 GSL 矩阵,AT
和 A
:
gsl_matrix *A; /* coefficient matrix A */
gsl_matrix *AT; /* coefficient matrix A' */
AT = gsl_matrix_alloc(nc, nr); /* Data matrix */
A = gsl_matrix_alloc(nr, nc); /* Data matrix */
/* Initialize A */
for(i = 0; i < nr; i++){
gsl_matrix_set(A, i, 0, 1.0);
}
for(i = 0; i < nr; i++){
for(j = 1; j < nc; j++){
gsl_matrix_set(A, i, j, 1.0 / (double)(i + j + 1));
}
}
gsl_matrix_transpose_memcpy(AT, A);
我想将这些矩阵相乘并将结果存储在矩阵 ATA
中,但我无法理解 GSL BLAS 文档。
我已经初始化了 ATA
矩阵:
gsl_matrix *ATA; /* coefficient matrix A'A */
ATA = gsl_matrix_alloc(nc, nc); /* Data matrix */
我看到我可以使用 gsl_blas_zgemm
来乘以复杂的矩阵,但这些矩阵并不复杂。我该怎么做?
更新
我试过:
gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, A, AT, 0.0, ATA);
它导致了以下错误:
gsl: blas.c:1354: ERROR: invalid length Default GSL error handler invoked. Aborted (core dumped)
我正在将矩阵向后相乘。正确的行是:
gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, AT, A, 0.0, ATA);