From f3f55565711893004df14cc4c6ffd86f0b736f2f Mon Sep 17 00:00:00 2001 From: Gertjan van den Burg Date: Thu, 6 Oct 2016 16:45:00 +0200 Subject: Switch to using dsyrk instead of dsyr for speed. Also added a workspace (GenWork) structure for to hold working matrices for the gensvm_get_update() and gensvm_get_loss() functions --- include/gensvm_base.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'include/gensvm_base.h') diff --git a/include/gensvm_base.h b/include/gensvm_base.h index efeaa4d..03b7ffa 100644 --- a/include/gensvm_base.h +++ b/include/gensvm_base.h @@ -99,12 +99,43 @@ struct GenModel { ///< array of kernel parameters, size depends on kernel type }; +/** + * @brief A structure to hold the GenSVM workspace + * + */ +struct GenWork { + long n; + ///< number of instances for the workspace + long m; + ///< number of features for the workspace + long K; + ///< number of classes for the workspace + + double *LZ; + ///< n x (m+1) working matrix for the Z'*A*Z calculation + double *ZB; + ///< (m+1) x (K-1) working matrix for the Z'*B calculation + double *ZBc; + ///< (K-1) x (m+1) working matrix for the Z'*B calculation + double *ZAZ; + ///< (m+1) x (m+1) working matrix for the Z'*A*Z calculation + double *ZV; + ///< n x (K-1) working matrix for the Z * V calculation + double *beta; + ///< K-1 working vector for a row of the B matrix +}; + // function declarations struct GenModel *gensvm_init_model(); void gensvm_allocate_model(struct GenModel *model); void gensvm_reallocate_model(struct GenModel *model, long n, long m); void gensvm_free_model(struct GenModel *model); + struct GenData *gensvm_init_data(); void gensvm_free_data(struct GenData *data); +struct GenWork *gensvm_init_work(struct GenModel *model); +void gensvm_free_work(struct GenWork *work); +void gensvm_reset_work(struct GenWork *work); + #endif -- cgit v1.2.3