@@ -189,13 +189,12 @@ struct bernoulli_distribution : public internals::distribution_base<std::bernoul
189189 for (int i = 0 , n = x.rows (); i < n; ++i) { dev_ += deviance (x (i, 0 ), y (i, 0 )); }
190190 return dev_;
191191 }
192+ template <typename Derived> matrix_t transform (const Eigen::MatrixBase<Derived>& data) const {
193+ return 0.5 * (data.array () + 0.5 );
194+ }
192195#endif
193- template <typename T> auto transform (const T& data) const {
194- if (internals::is_eigen_dense_xpr_v<T>) {
195- return 0.5 * (data.array () + 0.5 );
196- } else {
197- return Base::apply_ (data, [](auto v) { return 0.5 * (v + 0.5 ); });
198- }
196+ template <typename T> std::vector<T> transform (const std::vector<T>& data) const {
197+ return Base::apply_ (data, [](auto v) { return 0.5 * (v + 0.5 ); });
199198 }
200199 void set_param (param_type p) { p_ = p; }
201200};
@@ -284,13 +283,12 @@ struct poisson_distribution : public internals::distribution_base<std::poisson_d
284283 return ((y.array () > 0 ).select (y.array () * ((y.array () / x.array ()).log () - 1 ) + x.array (), x.array ()))
285284 .sum ();
286285 }
286+ template <typename Derived> matrix_t transform (const Eigen::MatrixBase<Derived>& data) const {
287+ return matrix_t ((data.array () <= 0 ).select (1.0 , data));
288+ }
287289#endif
288- template <typename T> auto transform (const T& data) const {
289- if (internals::is_eigen_dense_xpr_v<T>) {
290- return matrix_t ((data.array () <= 0 ).select (1.0 , data));
291- } else {
292- return Base::apply_ (data, [](auto v) { return v <= 0 ? 1.0 : v; });
293- }
290+ template <typename T> std::vector<T> transform (const std::vector<T>& data) const {
291+ return Base::apply_ (data, [](auto v) { return v <= 0 ? 1.0 : v; });
294292 }
295293 void set_param (param_type l) { l_ = l; }
296294};
0 commit comments