Operator_times

Functions

template<typename T1 >
arma_inline const eOp< T1,
eop_scalar_times
operator* (const Base< typename T1::elem_type, T1 > &X, const typename T1::elem_type k)
 Base * scalar.
template<typename T1 >
arma_inline const eOp< T1,
eop_scalar_times
operator* (const typename T1::elem_type k, const Base< typename T1::elem_type, T1 > &X)
 scalar * Base
template<typename T1 >
arma_inline Mat< typename
std::complex< typename
T1::pod_type > > 
operator* (const Base< typename T1::pod_type, T1 > &X, const std::complex< typename T1::pod_type > &k)
 non-complex Base * complex scalar (experimental)
template<typename T1 >
arma_inline Mat< typename
std::complex< typename
T1::pod_type > > 
operator* (const std::complex< typename T1::pod_type > &k, const Base< typename T1::pod_type, T1 > &X)
 complex scalar * non-complex Base (experimental)
template<typename T1 >
arma_inline const Op< T1,
op_trans2
operator* (const typename T1::elem_type k, const Op< T1, op_trans > &X)
 scalar * trans(T1)
template<typename T1 >
arma_inline const Op< T1,
op_trans2
operator* (const Op< T1, op_trans > &X, const typename T1::elem_type k)
 trans(T1) * scalar
template<typename T1 , typename T2 >
arma_inline const Glue< T1, Op
< T2, op_diagmat >
, glue_times_diag
operator* (const Base< typename T2::elem_type, T1 > &X, const Op< T2, op_diagmat > &Y)
 Base * diagmat.
template<typename T1 , typename T2 >
arma_inline const Glue< Op< T1,
op_diagmat >, T2,
glue_times_diag
operator* (const Op< T1, op_diagmat > &X, const Base< typename T1::elem_type, T2 > &Y)
 diagmat * Base
template<typename T1 , typename T2 >
arma_inline Mat< typename
promote_type< typename
T1::elem_type, typename
T2::elem_type >::result > 
operator* (const Op< T1, op_diagmat > &X, const Op< T2, op_diagmat > &Y)
 diagmat * diagmat
template<typename T1 , typename T2 >
arma_inline const Glue< T1, T2,
glue_times
operator* (const Base< typename T1::elem_type, T1 > &X, const Base< typename T1::elem_type, T2 > &Y)
 multiplication of Base objects with same element type
template<typename T1 , typename T2 >
arma_inline Mat< typename
promote_type< typename
T1::elem_type, typename
T2::elem_type >::result > 
operator* (const Base< typename force_different_type< typename T1::elem_type, typename T2::elem_type >::T1_result, T1 > &X, const Base< typename force_different_type< typename T1::elem_type, typename T2::elem_type >::T2_result, T2 > &Y)
 multiplication of Base objects with different element types

Function Documentation

template<typename T1 >
arma_inline const eOp<T1, eop_scalar_times> operator* ( const Base< typename T1::elem_type, T1 > &  X,
const typename T1::elem_type  k 
) [inline]

Base * scalar.

Definition at line 28 of file operator_times.hpp.

References Base< elem_type, derived >::get_ref().

00029   {
00030   arma_extra_debug_sigprint();
00031   
00032   return eOp<T1, eop_scalar_times>(X.get_ref(),k);
00033   }

template<typename T1 >
arma_inline const eOp<T1, eop_scalar_times> operator* ( const typename T1::elem_type  k,
const Base< typename T1::elem_type, T1 > &  X 
) [inline]

scalar * Base

Definition at line 42 of file operator_times.hpp.

References Base< elem_type, derived >::get_ref().

00043   {
00044   arma_extra_debug_sigprint();
00045   
00046   return eOp<T1, eop_scalar_times>(X.get_ref(),k);  // NOTE: order is swapped
00047   }

template<typename T1 >
arma_inline Mat<typename std::complex<typename T1::pod_type> > operator* ( const Base< typename T1::pod_type, T1 > &  X,
const std::complex< typename T1::pod_type > &  k 
) [inline]

non-complex Base * complex scalar (experimental)

Definition at line 56 of file operator_times.hpp.

References Base< elem_type, derived >::get_ref().

00060   {
00061   arma_extra_debug_sigprint();
00062   
00063   typedef typename std::complex<typename T1::pod_type> eT;
00064   typedef typename T1::pod_type                         T;
00065   
00066   const Proxy<T1> A(X.get_ref());
00067   
00068   Mat<eT> out(A.n_rows, A.n_cols);
00069   
00070   const u32 n_elem  = A.n_elem;
00071         eT* out_mem = out.memptr();
00072   
00073   for(u32 i=0; i<n_elem; ++i)
00074     {
00075     out_mem[i] = A[i] * k;
00076     }
00077   
00078   return out;
00079   }

template<typename T1 >
arma_inline Mat<typename std::complex<typename T1::pod_type> > operator* ( const std::complex< typename T1::pod_type > &  k,
const Base< typename T1::pod_type, T1 > &  X 
) [inline]

complex scalar * non-complex Base (experimental)

Definition at line 88 of file operator_times.hpp.

References Base< elem_type, derived >::get_ref().

00092   {
00093   arma_extra_debug_sigprint();
00094   
00095   typedef typename std::complex<typename T1::pod_type> eT;
00096   typedef typename T1::pod_type                         T;
00097   
00098   const Proxy<T1> A(X.get_ref());
00099   
00100   Mat<eT> out(A.n_rows, A.n_cols);
00101   
00102   const u32 n_elem  = A.n_elem;
00103         eT* out_mem = out.memptr();
00104   
00105   for(u32 i=0; i<n_elem; ++i)
00106     {
00107     out_mem[i] = k * A[i];
00108     }
00109   
00110   return out;
00111   }

template<typename T1 >
arma_inline const Op<T1, op_trans2> operator* ( const typename T1::elem_type  k,
const Op< T1, op_trans > &  X 
) [inline]

scalar * trans(T1)

Definition at line 120 of file operator_times.hpp.

00121   {
00122   arma_extra_debug_sigprint();
00123   
00124   return Op<T1, op_trans2>(X.m, k);
00125   }

template<typename T1 >
arma_inline const Op<T1, op_trans2> operator* ( const Op< T1, op_trans > &  X,
const typename T1::elem_type  k 
) [inline]

trans(T1) * scalar

Definition at line 134 of file operator_times.hpp.

References Op< T1, op_type >::m.

00135   {
00136   arma_extra_debug_sigprint();
00137   
00138   return Op<T1, op_trans2>(X.m, k);
00139   }

template<typename T1 , typename T2 >
arma_inline const Glue<T1, Op<T2, op_diagmat>, glue_times_diag> operator* ( const Base< typename T2::elem_type, T1 > &  X,
const Op< T2, op_diagmat > &  Y 
) [inline]

Base * diagmat.

Definition at line 148 of file operator_times.hpp.

References Base< elem_type, derived >::get_ref().

00149   {
00150   arma_extra_debug_sigprint();
00151   
00152   return Glue<T1, Op<T2, op_diagmat>, glue_times_diag>(X.get_ref(), Y);
00153   }

template<typename T1 , typename T2 >
arma_inline const Glue<Op<T1, op_diagmat>, T2, glue_times_diag> operator* ( const Op< T1, op_diagmat > &  X,
const Base< typename T1::elem_type, T2 > &  Y 
) [inline]

diagmat * Base

Definition at line 162 of file operator_times.hpp.

References Base< T1::elem_type, Op< T1, op_type > >::get_ref().

00163   {
00164   arma_extra_debug_sigprint();
00165   
00166   return Glue<Op<T1, op_diagmat>, T2, glue_times_diag>(X, Y.get_ref());
00167   }

template<typename T1 , typename T2 >
arma_inline Mat< typename promote_type<typename T1::elem_type, typename T2::elem_type>::result > operator* ( const Op< T1, op_diagmat > &  X,
const Op< T2, op_diagmat > &  Y 
) [inline]

diagmat * diagmat

Definition at line 176 of file operator_times.hpp.

References upgrade_val< T1, T2 >::apply(), Mat< eT >::at(), promote_type< T1, T2 >::check(), Op< T1, op_type >::m, diagmat_proxy< T1 >::n_elem, and Mat< eT >::zeros().

00177   {
00178   arma_extra_debug_sigprint();
00179   
00180   typedef typename T1::elem_type eT1;
00181   typedef typename T2::elem_type eT2;
00182   
00183   typedef typename promote_type<eT1,eT2>::result out_eT;
00184   
00185   promote_type<eT1,eT2>::check();
00186   
00187   const diagmat_proxy<T1> A(X.m);
00188   const diagmat_proxy<T2> B(Y.m);
00189   
00190   arma_debug_assert_mul_size(A.n_elem, A.n_elem, B.n_elem, B.n_elem, "matrix multiply");
00191   
00192   const u32 N = A.n_elem;
00193   
00194   Mat<out_eT> out(N,N);
00195   
00196   out.zeros();
00197   
00198   for(u32 i=0; i<N; ++i)
00199     {
00200     out.at(i,i) = upgrade_val<eT1,eT2>::apply( A[i] ) * upgrade_val<eT1,eT2>::apply( B[i] );
00201     }
00202   
00203   return out;
00204   }

template<typename T1 , typename T2 >
arma_inline const Glue<T1, T2, glue_times> operator* ( const Base< typename T1::elem_type, T1 > &  X,
const Base< typename T1::elem_type, T2 > &  Y 
) [inline]

multiplication of Base objects with same element type

Definition at line 213 of file operator_times.hpp.

References Base< elem_type, derived >::get_ref().

00214   {
00215   arma_extra_debug_sigprint();
00216   
00217   return Glue<T1, T2, glue_times>(X.get_ref(), Y.get_ref());
00218   }

template<typename T1 , typename T2 >
arma_inline Mat<typename promote_type<typename T1::elem_type, typename T2::elem_type>::result> operator* ( const Base< typename force_different_type< typename T1::elem_type, typename T2::elem_type >::T1_result, T1 > &  X,
const Base< typename force_different_type< typename T1::elem_type, typename T2::elem_type >::T2_result, T2 > &  Y 
) [inline]

multiplication of Base objects with different element types

Definition at line 227 of file operator_times.hpp.

References glue_times::apply_mixed(), promote_type< T1, T2 >::check(), and Base< elem_type, derived >::get_ref().

00231   {
00232   arma_extra_debug_sigprint();
00233   
00234   typedef typename T1::elem_type eT1;
00235   typedef typename T2::elem_type eT2;
00236   
00237   typedef typename promote_type<eT1,eT2>::result out_eT;
00238   
00239   promote_type<eT1,eT2>::check();
00240   
00241   const unwrap<T1> tmp1(X.get_ref());
00242   const unwrap<T2> tmp2(Y.get_ref());
00243   
00244   const Mat<eT1>& A = tmp1.M;
00245   const Mat<eT2>& B = tmp2.M;
00246   
00247   Mat<out_eT> out;
00248   
00249   glue_times::apply_mixed(out, A, B);
00250   
00251   return out;
00252   }