rework sparse vecnorm() to use mtSpToDOp
This commit is contained in:
+2
-2
@@ -323,6 +323,7 @@ namespace arma
|
||||
#include "armadillo_bits/op_sp_mean_bones.hpp"
|
||||
#include "armadillo_bits/op_sp_var_bones.hpp"
|
||||
#include "armadillo_bits/op_sp_stddev_bones.hpp"
|
||||
#include "armadillo_bits/op_sp_vecnorm_bones.hpp"
|
||||
#include "armadillo_bits/op_powmat_bones.hpp"
|
||||
#include "armadillo_bits/op_rank_bones.hpp"
|
||||
#include "armadillo_bits/op_row_as_mat_bones.hpp"
|
||||
@@ -370,7 +371,6 @@ namespace arma
|
||||
#include "armadillo_bits/spop_repmat_bones.hpp"
|
||||
#include "armadillo_bits/spop_vectorise_bones.hpp"
|
||||
#include "armadillo_bits/spop_norm_bones.hpp"
|
||||
#include "armadillo_bits/spop_vecnorm_bones.hpp"
|
||||
#include "armadillo_bits/spop_shift_bones.hpp"
|
||||
|
||||
#include "armadillo_bits/spglue_plus_bones.hpp"
|
||||
@@ -773,6 +773,7 @@ namespace arma
|
||||
#include "armadillo_bits/op_sp_mean_meat.hpp"
|
||||
#include "armadillo_bits/op_sp_var_meat.hpp"
|
||||
#include "armadillo_bits/op_sp_stddev_meat.hpp"
|
||||
#include "armadillo_bits/op_sp_vecnorm_meat.hpp"
|
||||
#include "armadillo_bits/op_powmat_meat.hpp"
|
||||
#include "armadillo_bits/op_rank_meat.hpp"
|
||||
#include "armadillo_bits/op_row_as_mat_meat.hpp"
|
||||
@@ -820,7 +821,6 @@ namespace arma
|
||||
#include "armadillo_bits/spop_repmat_meat.hpp"
|
||||
#include "armadillo_bits/spop_vectorise_meat.hpp"
|
||||
#include "armadillo_bits/spop_norm_meat.hpp"
|
||||
#include "armadillo_bits/spop_vecnorm_meat.hpp"
|
||||
#include "armadillo_bits/spop_shift_meat.hpp"
|
||||
|
||||
#include "armadillo_bits/spglue_plus_meat.hpp"
|
||||
|
||||
@@ -249,7 +249,7 @@ typename
|
||||
enable_if2
|
||||
<
|
||||
is_arma_sparse_type<T1>::value && resolves_to_sparse_vector<T1>::no,
|
||||
const mtSpOp<typename T1::pod_type, T1, spop_vecnorm>
|
||||
const mtSpToDOp<typename T1::pod_type, T1, op_sp_vecnorm>
|
||||
>::result
|
||||
vecnorm
|
||||
(
|
||||
@@ -265,7 +265,7 @@ vecnorm
|
||||
|
||||
const uword dim = 0;
|
||||
|
||||
return mtSpOp<typename T1::pod_type, T1, spop_vecnorm>(X, k, dim);
|
||||
return mtSpToDOp<typename T1::pod_type, T1, op_sp_vecnorm>(X, k, dim);
|
||||
}
|
||||
|
||||
|
||||
@@ -273,7 +273,7 @@ vecnorm
|
||||
template<typename T1>
|
||||
arma_warn_unused
|
||||
inline
|
||||
const mtSpOp<typename T1::pod_type, T1, spop_vecnorm>
|
||||
const mtSpToDOp<typename T1::pod_type, T1, op_sp_vecnorm>
|
||||
vecnorm
|
||||
(
|
||||
const SpBase<typename T1::elem_type,T1>& X,
|
||||
@@ -285,7 +285,7 @@ vecnorm
|
||||
arma_debug_sigprint();
|
||||
arma_ignore(junk);
|
||||
|
||||
return mtSpOp<typename T1::pod_type, T1, spop_vecnorm>(X.get_ref(), k, dim);
|
||||
return mtSpToDOp<typename T1::pod_type, T1, op_sp_vecnorm>(X.get_ref(), k, dim);
|
||||
}
|
||||
|
||||
|
||||
@@ -327,7 +327,7 @@ typename
|
||||
enable_if2
|
||||
<
|
||||
is_arma_sparse_type<T1>::value && resolves_to_sparse_vector<T1>::no,
|
||||
const mtSpOp<typename T1::pod_type, T1, spop_vecnorm_ext>
|
||||
const mtSpToDOp<typename T1::pod_type, T1, op_sp_vecnorm_ext>
|
||||
>::result
|
||||
vecnorm
|
||||
(
|
||||
@@ -350,7 +350,7 @@ vecnorm
|
||||
|
||||
const uword dim = 0;
|
||||
|
||||
return mtSpOp<typename T1::pod_type, T1, spop_vecnorm_ext>(X, method_id, dim);
|
||||
return mtSpToDOp<typename T1::pod_type, T1, op_sp_vecnorm_ext>(X, method_id, dim);
|
||||
}
|
||||
|
||||
|
||||
@@ -358,7 +358,7 @@ vecnorm
|
||||
template<typename T1>
|
||||
arma_warn_unused
|
||||
inline
|
||||
const mtSpOp<typename T1::pod_type, T1, spop_vecnorm_ext>
|
||||
const mtSpToDOp<typename T1::pod_type, T1, op_sp_vecnorm_ext>
|
||||
vecnorm
|
||||
(
|
||||
const SpBase<typename T1::elem_type,T1>& X,
|
||||
@@ -377,7 +377,7 @@ vecnorm
|
||||
if( (sig == 'i') || (sig == 'I') || (sig == '+') ) { method_id = 1; }
|
||||
if( (sig == '-') ) { method_id = 2; }
|
||||
|
||||
return mtSpOp<typename T1::pod_type, T1, spop_vecnorm_ext>(X.get_ref(), method_id, dim);
|
||||
return mtSpToDOp<typename T1::pod_type, T1, op_sp_vecnorm_ext>(X.get_ref(), method_id, dim);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+5
-5
@@ -16,17 +16,17 @@
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
|
||||
//! \addtogroup spop_vecnorm
|
||||
//! \addtogroup op_sp_vecnorm
|
||||
//! @{
|
||||
|
||||
|
||||
class spop_vecnorm
|
||||
class op_sp_vecnorm
|
||||
: public traits_op_xvec
|
||||
{
|
||||
public:
|
||||
|
||||
template<typename T1>
|
||||
inline static void apply(SpMat<typename T1::pod_type>& out, const mtSpOp<typename T1::pod_type,T1,spop_vecnorm>& expr);
|
||||
inline static void apply(Mat<typename T1::pod_type>& out, const mtSpToDOp<typename T1::pod_type,T1,op_sp_vecnorm>& expr);
|
||||
|
||||
template<typename eT>
|
||||
inline static void apply_direct(Mat< typename get_pod_type<eT>::result >& out, const SpMat<eT>& X, const uword k);
|
||||
@@ -36,13 +36,13 @@ class spop_vecnorm
|
||||
//
|
||||
|
||||
|
||||
class spop_vecnorm_ext
|
||||
class op_sp_vecnorm_ext
|
||||
: public traits_op_xvec
|
||||
{
|
||||
public:
|
||||
|
||||
template<typename T1>
|
||||
inline static void apply(SpMat<typename T1::pod_type>& out, const mtSpOp<typename T1::pod_type,T1,spop_vecnorm_ext>& expr);
|
||||
inline static void apply(Mat<typename T1::pod_type>& out, const mtSpToDOp<typename T1::pod_type,T1,op_sp_vecnorm_ext>& expr);
|
||||
|
||||
template<typename eT>
|
||||
inline static void apply_direct(Mat< typename get_pod_type<eT>::result >& out, const SpMat<eT>& X, const uword method_id);
|
||||
+9
-17
@@ -16,7 +16,7 @@
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
|
||||
//! \addtogroup spop_vecnorm
|
||||
//! \addtogroup op_sp_vecnorm
|
||||
//! @{
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
template<typename T1>
|
||||
inline
|
||||
void
|
||||
spop_vecnorm::apply(SpMat<typename T1::pod_type>& out, const mtSpOp<typename T1::pod_type,T1,spop_vecnorm>& expr)
|
||||
op_sp_vecnorm::apply(Mat<typename T1::pod_type>& out, const mtSpToDOp<typename T1::pod_type,T1,op_sp_vecnorm>& expr)
|
||||
{
|
||||
arma_debug_sigprint();
|
||||
|
||||
@@ -44,11 +44,7 @@ spop_vecnorm::apply(SpMat<typename T1::pod_type>& out, const mtSpOp<typename T1:
|
||||
|
||||
if(dim == 0)
|
||||
{
|
||||
Mat<T> tmp;
|
||||
|
||||
spop_vecnorm::apply_direct(tmp, X, k);
|
||||
|
||||
out = tmp;
|
||||
op_sp_vecnorm::apply_direct(out, X, k);
|
||||
}
|
||||
else
|
||||
if(dim == 1)
|
||||
@@ -58,7 +54,7 @@ spop_vecnorm::apply(SpMat<typename T1::pod_type>& out, const mtSpOp<typename T1:
|
||||
|
||||
spop_strans::apply_noalias(Xt, X);
|
||||
|
||||
spop_vecnorm::apply_direct(tmp, Xt, k);
|
||||
op_sp_vecnorm::apply_direct(tmp, Xt, k);
|
||||
|
||||
out = tmp.t();
|
||||
}
|
||||
@@ -69,7 +65,7 @@ spop_vecnorm::apply(SpMat<typename T1::pod_type>& out, const mtSpOp<typename T1:
|
||||
template<typename eT>
|
||||
inline
|
||||
void
|
||||
spop_vecnorm::apply_direct(Mat< typename get_pod_type<eT>::result >& out, const SpMat<eT>& X, const uword k)
|
||||
op_sp_vecnorm::apply_direct(Mat< typename get_pod_type<eT>::result >& out, const SpMat<eT>& X, const uword k)
|
||||
{
|
||||
arma_debug_sigprint();
|
||||
|
||||
@@ -114,7 +110,7 @@ spop_vecnorm::apply_direct(Mat< typename get_pod_type<eT>::result >& out, const
|
||||
template<typename T1>
|
||||
inline
|
||||
void
|
||||
spop_vecnorm_ext::apply(SpMat<typename T1::pod_type>& out, const mtSpOp<typename T1::pod_type,T1,spop_vecnorm_ext>& expr)
|
||||
op_sp_vecnorm_ext::apply(Mat<typename T1::pod_type>& out, const mtSpToDOp<typename T1::pod_type,T1,op_sp_vecnorm_ext>& expr)
|
||||
{
|
||||
arma_debug_sigprint();
|
||||
|
||||
@@ -134,11 +130,7 @@ spop_vecnorm_ext::apply(SpMat<typename T1::pod_type>& out, const mtSpOp<typename
|
||||
|
||||
if(dim == 0)
|
||||
{
|
||||
Mat<T> tmp;
|
||||
|
||||
spop_vecnorm_ext::apply_direct(tmp, X, method_id);
|
||||
|
||||
out = tmp;
|
||||
op_sp_vecnorm_ext::apply_direct(out, X, method_id);
|
||||
}
|
||||
else
|
||||
if(dim == 1)
|
||||
@@ -148,7 +140,7 @@ spop_vecnorm_ext::apply(SpMat<typename T1::pod_type>& out, const mtSpOp<typename
|
||||
|
||||
spop_strans::apply_noalias(Xt, X);
|
||||
|
||||
spop_vecnorm_ext::apply_direct(tmp, Xt, method_id);
|
||||
op_sp_vecnorm_ext::apply_direct(tmp, Xt, method_id);
|
||||
|
||||
out = tmp.t();
|
||||
}
|
||||
@@ -159,7 +151,7 @@ spop_vecnorm_ext::apply(SpMat<typename T1::pod_type>& out, const mtSpOp<typename
|
||||
template<typename eT>
|
||||
inline
|
||||
void
|
||||
spop_vecnorm_ext::apply_direct(Mat< typename get_pod_type<eT>::result >& out, const SpMat<eT>& X, const uword method_id)
|
||||
op_sp_vecnorm_ext::apply_direct(Mat< typename get_pod_type<eT>::result >& out, const SpMat<eT>& X, const uword method_id)
|
||||
{
|
||||
arma_debug_sigprint();
|
||||
|
||||
Reference in New Issue
Block a user