Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
A bunch of fastfixes
  • Loading branch information
lisitsyn committed May 8, 2012
1 parent 56661f3 commit 02efa8e
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 22 deletions.
16 changes: 7 additions & 9 deletions src/shogun/converter/LinearLocalTangentSpaceAlignment.cpp
Expand Up @@ -40,31 +40,30 @@ SGMatrix<float64_t> CLinearLocalTangentSpaceAlignment::construct_embedding(CFeat
ASSERT(simple_features);
int i,j;

SGMatrix<float64_t> feature_matrix = simple_features->get_feature_matrix().clone();
int N;
int dim;
float64_t* feature_matrix;
simple_features->get_feature_matrix(&feature_matrix,&dim,&N);
ASSERT(dimension<=dim);
float64_t* XTM = SG_MALLOC(float64_t, dim*N);
float64_t* lhs_M = SG_MALLOC(float64_t, dim*dim);
float64_t* rhs_M = SG_MALLOC(float64_t, dim*dim);
CMath::center_matrix(matrix.matrix,N,N);

cblas_dgemm(CblasColMajor,CblasNoTrans,CblasNoTrans,dim,N,N,1.0,feature_matrix,dim,matrix.matrix,N,0.0,XTM,dim);
cblas_dgemm(CblasColMajor,CblasNoTrans,CblasTrans,dim,dim,N,1.0,XTM,dim,feature_matrix,dim,0.0,lhs_M,dim);
cblas_dgemm(CblasColMajor,CblasNoTrans,CblasNoTrans,dim,N,N,1.0,feature_matrix.matrix,dim,matrix.matrix,N,0.0,XTM,dim);
cblas_dgemm(CblasColMajor,CblasNoTrans,CblasTrans,dim,dim,N,1.0,XTM,dim,feature_matrix.matrix,dim,0.0,lhs_M,dim);

float64_t* mean_vector = SG_CALLOC(float64_t, dim);
for (i=0; i<N; i++)
cblas_daxpy(dim,1.0,feature_matrix+i*dim,1,mean_vector,1);
cblas_daxpy(dim,1.0,feature_matrix.matrix+i*dim,1,mean_vector,1);

cblas_dscal(dim,1.0/N,mean_vector,1);

for (i=0; i<N; i++)
cblas_daxpy(dim,-1.0,mean_vector,1,feature_matrix+i*dim,1);
cblas_daxpy(dim,-1.0,mean_vector,1,feature_matrix.matrix+i*dim,1);

SG_FREE(mean_vector);

cblas_dgemm(CblasColMajor,CblasNoTrans,CblasTrans,dim,dim,N,1.0,feature_matrix,dim,feature_matrix,dim,0.0,rhs_M,dim);
cblas_dgemm(CblasColMajor,CblasNoTrans,CblasTrans,dim,dim,N,1.0,feature_matrix.matrix,dim,feature_matrix.matrix,dim,0.0,rhs_M,dim);

for (i=0; i<dim; i++) rhs_M[i*dim+i] += 1e-6;

Expand All @@ -87,9 +86,8 @@ SGMatrix<float64_t> CLinearLocalTangentSpaceAlignment::construct_embedding(CFeat
cblas_dswap(dim,evectors+i*dim,1,evectors+(dimension-i-1)*dim,1);
}

cblas_dgemm(CblasColMajor,CblasTrans,CblasNoTrans,N,dimension,dim,1.0,feature_matrix,dim,evectors,dim,0.0,XTM,N);
cblas_dgemm(CblasColMajor,CblasTrans,CblasNoTrans,N,dimension,dim,1.0,feature_matrix.matrix,dim,evectors,dim,0.0,XTM,N);
SG_FREE(evectors);
SG_FREE(feature_matrix);

float64_t* new_features = SG_MALLOC(float64_t, dimension*N);
for (i=0; i<dimension; i++)
Expand Down
11 changes: 4 additions & 7 deletions src/shogun/features/TOPFeatures.cpp
Expand Up @@ -71,9 +71,7 @@ void CTOPFeatures::set_models(CHMM* p, CHMM* n)
neg=n;
set_num_vectors(0);

SG_FREE(feature_matrix);
feature_matrix=NULL ;

feature_matrix.unref();

if (pos && pos->get_observations())
set_num_vectors(pos->get_observations()->get_num_vectors());
Expand Down Expand Up @@ -201,9 +199,8 @@ float64_t* CTOPFeatures::set_feature_matrix()

num_vectors=pos->get_observations()->get_num_vectors();
SG_INFO( "allocating top feature cache of size %.2fM\n", sizeof(float64_t)*num_features*num_vectors/1024.0/1024.0);
SG_FREE(feature_matrix);
feature_matrix=SG_MALLOC(float64_t, num_features*num_vectors);
if (!feature_matrix)
feature_matrix = SGMatrix<float64_t>(num_features,num_vectors);
if (!feature_matrix.matrix)
{
SG_ERROR( "allocation not successful!");
return NULL ;
Expand All @@ -226,7 +223,7 @@ float64_t* CTOPFeatures::set_feature_matrix()
num_vectors=get_num_vectors() ;
num_features=get_num_features() ;

return feature_matrix;
return feature_matrix.matrix;
}

bool CTOPFeatures::compute_relevant_indizes(CHMM* hmm, T_HMM_INDIZES* hmm_idx)
Expand Down
2 changes: 1 addition & 1 deletion src/shogun/ui/GUIFeatures.cpp
Expand Up @@ -391,7 +391,7 @@ CDenseFeatures<float64_t>* CGUIFeatures::convert_simple_word_to_simple_salzberg(

src->free_feature_vector(vec, i, to_free);
}
target->set_feature_matrix(fm, num_feat, num_vec);
target->set_feature_matrix(SGMatrix<float64_t>(fm, num_feat, num_vec));

}
return target;
Expand Down
10 changes: 5 additions & 5 deletions src/shogun/ui/SGInterface.cpp
Expand Up @@ -1824,7 +1824,7 @@ bool CSGInterface::do_set_features(bool add, bool check_dot, int32_t repetitions

feat=new CDenseFeatures<float64_t>(0);
((CDenseFeatures<float64_t>*) feat)->
set_feature_matrix(fmatrix, num_feat, num_vec);
set_feature_matrix(SGMatrix<float64_t>(fmatrix, num_feat, num_vec));

if (m_nrhs==6)
feat = create_custom_real_features((CDenseFeatures<float64_t>*) feat);
Expand All @@ -1839,7 +1839,7 @@ bool CSGInterface::do_set_features(bool add, bool check_dot, int32_t repetitions

feat=new CDenseFeatures<int32_t>(0);
((CDenseFeatures<int32_t>*) feat)->
set_feature_matrix(fmatrix, num_feat, num_vec);
set_feature_matrix(SGMatrix<int32_t>(fmatrix, num_feat, num_vec));
break;
}

Expand All @@ -1850,7 +1850,7 @@ bool CSGInterface::do_set_features(bool add, bool check_dot, int32_t repetitions

feat=new CDenseFeatures<int16_t>(0);
((CDenseFeatures<int16_t>*) feat)->
set_feature_matrix(fmatrix, num_feat, num_vec);
set_feature_matrix(SGMatrix<int16_t>(fmatrix, num_feat, num_vec));
break;
}

Expand All @@ -1861,7 +1861,7 @@ bool CSGInterface::do_set_features(bool add, bool check_dot, int32_t repetitions

feat=new CDenseFeatures<uint16_t>(0);
((CDenseFeatures<uint16_t>*) feat)->
set_feature_matrix(fmatrix, num_feat, num_vec);
set_feature_matrix(SGMatrix<uint16_t>(fmatrix, num_feat, num_vec));
break;
}

Expand All @@ -1872,7 +1872,7 @@ bool CSGInterface::do_set_features(bool add, bool check_dot, int32_t repetitions

feat=new CDenseFeatures<float32_t>(0);
((CDenseFeatures<float32_t>*) feat)->
set_feature_matrix(fmatrix, num_feat, num_vec);
set_feature_matrix(SGMatrix<float32_t>(fmatrix, num_feat, num_vec));
break;
}

Expand Down

0 comments on commit 02efa8e

Please sign in to comment.