0

cblass_dgemm を使用して 2 つの行列を乗算しています

B = A' x A; を計算することになっています。

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);

プログラムを実行するとセグメンテーション違反が発生しますが、マトリックスのサイズが正しいことは確かです。

4

1 に答える 1

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

于 2013-11-26T11:08:03.580 に答える