Advertisement
Guest User

cpp

a guest
Sep 27th, 2012
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * This program is free software; you can redistribute it and/or modify
  3.  * it under the terms of the GNU General Public License as published by
  4.  * the Free Software Foundation; either version 3 of the License, or
  5.  * (at your option) any later version.
  6.  *
  7.  * Written (W) 2012 Heiko Strathmann
  8.  */
  9.  
  10. #include <shogun/features/streaming/StreamingDenseDataGenerator.h>
  11.  
  12. using namespace shogun;
  13.  
  14. template<class T>
  15. CStreamingDenseDataGenerator<T>::CStreamingDenseDataGenerator() :
  16.         CStreamingDenseFeatures<T>()
  17. {
  18.     init();
  19. }
  20.  
  21. template<class T>
  22. CStreamingDenseDataGenerator<T>::~CStreamingDenseDataGenerator()
  23. {
  24.     delete m_model_parameters;
  25. }
  26.  
  27. template<class T>
  28. void CStreamingDenseDataGenerator<T>::init()
  29. {
  30.     m_model_parameters=new Parameter();
  31.     m_model=DGD_NONE;
  32. }
  33.  
  34. template<class T>
  35. void CStreamingDenseDataGenerator<T>::set_mean_shift_model(T mean_shift,
  36.         index_t dim)
  37. {
  38.     /* re-create parmeter list and add specified parameters */
  39.     delete m_model_parameters;
  40.     m_model_parameters=new Parameter();
  41.     m_model_parameters->add(&mean_shift, "mean_shift");
  42.     m_model_parameters->add(&dim, "dim");
  43.  
  44.     m_model=DGD_MEAN_SHIFT;
  45. }
  46.  
  47. template<class T>
  48. SGVector<T> CStreamingDenseDataGenerator<T>::generate_mean_shift_data(
  49.         index_t dim, T mean_shift)
  50. {
  51.     /* allocate space */
  52.     SGVector<T> result=SGVector<T>(dim);
  53.  
  54.     /* fill with std normal data */
  55.     for (index_t i=0; i<dim; ++i)
  56.         result[i]=CMath::randn_double();
  57.  
  58.     /* mean shift in first dimension */
  59.     result[0]+=mean_shift;
  60.  
  61.     return result;
  62. }
  63.  
  64. template<class T>
  65. bool CStreamingDenseDataGenerator<T>::get_next_example()
  66. {
  67.     bool result=true;
  68.  
  69.     /* these casts are safe due to the way the parameters were added above */
  70.     switch (m_model)
  71.         {
  72.         case DGD_MEAN_SHIFT:
  73.         {
  74.             T mean_shift=*((T*)
  75.                     (m_model_parameters->get_parameter("mean_shift")->m_parameter));
  76.             index_t dim=*((index_t*)
  77.                     (m_model_parameters->get_parameter("dim")->m_parameter));
  78.  
  79.             CStreamingDenseDataGenerator<T>::current_vector=
  80.                     generate_mean_shift_data(dim, mean_shift);
  81.             break;
  82.         }
  83.         default:
  84.             SG_SWARNING("%s::get_streamed_features(): no model specified!");
  85.             result=false;
  86.             break;
  87.         }
  88.  
  89.     return result;
  90. }
  91.  
  92. template class CStreamingDenseDataGenerator<bool>;
  93. template class CStreamingDenseDataGenerator<char>;
  94. template class CStreamingDenseDataGenerator<int8_t>;
  95. template class CStreamingDenseDataGenerator<uint8_t>;
  96. template class CStreamingDenseDataGenerator<int16_t>;
  97. template class CStreamingDenseDataGenerator<uint16_t>;
  98. template class CStreamingDenseDataGenerator<int32_t>;
  99. template class CStreamingDenseDataGenerator<uint32_t>;
  100. template class CStreamingDenseDataGenerator<int64_t>;
  101. template class CStreamingDenseDataGenerator<uint64_t>;
  102. template class CStreamingDenseDataGenerator<float32_t>;
  103. template class CStreamingDenseDataGenerator<float64_t>;
  104. template class CStreamingDenseDataGenerator<floatmax_t>;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement