ошибка сегментации cblas_dgemm

Я использую cblass_dgemm для умножения двух матриц.

Предполагается вычислить В = А' х А;

row_train = 10304, col_train = 5;

gsl_matrix *mean_centred_train = gsl_matrix_alloc(row_train, col_train);
gsl_matrix * image_for_eigen = gsl_matrix_alloc(col_train, col_train);

Вот как я это называю:

cblas_dgemm(CblasRowMajor, CblasTrans, CblasNoTrans, mean_centred_train->size1, mean_centred_train->size2, mean_centred_train->size2, 1, mean_centred_train->data, mean_centred_train->size1, mean_centred_train->data, mean_centred_train->size1, 1, image_for_eigen->data, image_for_eigen->size1);

И когда я запускаю программу, я получаю ошибку сегментации, и я почти уверен, что размеры матриц верны.


person Tal_    schedule 14.11.2013    source источник


Ответы (1)


Это должно быть так.

cblas_dgemm(CblasRowMajor, CblasTrans, CblasNoTrans, 
            image_for_eigen->size1, //m
            image_for_eigen ->size2,  //n
            mean_centred_train->size1,  //k
            1.0, //alpha 
            mean_centred_train->data, mean_centred_train->size1,
            mean_centred_train->data, mean_centred_train->size1,
            0.0, //beta
            image_for_eigen->data, image_for_eigen->size1);

[m, n] - это размер результирующей матрицы, независимо от того, транспонированы входные матрицы или нет. Также beta должно быть 0.0, если вы хотите B=A'*A.

person kangshiyin    schedule 26.11.2013