2013-11-14 2 views
0
나는 B = A를 계산하도록되어 두 행렬

cblas_dgemm는 세그먼트 오류

을 곱 cblass_dgemm을 사용하고

는 'A를 X;

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

을 내가 프로그램을 실행할 때 나는 세그먼트 오류를 ​​얻을, 나는 행렬의 크기가 정확한지 확신 해요.

답변

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]는 상관없이 입력 행렬 전치되거나되지 않은 결과 행렬의 크기이다. B=A'*A을 원하면 beta0.0이어야합니다.