Op_prod

Classes

class  op_prod
 Class for finding products of values in a matrix (e.g. along rows or columns). More...

Functions

template<typename T1 >
static void op_prod::apply (Mat< typename T1::elem_type > &out, const Op< T1, op_prod > &in)
 Immediate product of elements of a matrix along a specified dimension (either rows or columns). The result is stored in a dense matrix that has either one column or one row. See the prod() function for more details.

Function Documentation

template<typename T1 >
void op_prod::apply ( Mat< typename T1::elem_type > &  out,
const Op< T1, op_prod > &  in 
) [inline, static, inherited]

Immediate product of elements of a matrix along a specified dimension (either rows or columns). The result is stored in a dense matrix that has either one column or one row. See the prod() function for more details.

Definition at line 27 of file op_prod_meat.hpp.

References Mat< eT >::at(), Op< T1, op_type >::aux_u32_a, Mat< eT >::colptr(), unwrap_check< T1 >::M, Op< T1, op_type >::m, Mat< eT >::n_cols, Mat< eT >::n_elem, Mat< eT >::n_rows, and Mat< eT >::set_size().

00028   {
00029   arma_extra_debug_sigprint();
00030   
00031   typedef typename T1::elem_type eT;
00032   
00033   const u32 dim = in.aux_u32_a;
00034   arma_debug_check( (dim > 1), "prod(): incorrect usage. dim must be 0 or 1");
00035   
00036   const unwrap_check<T1> tmp(in.m, out);
00037   const Mat<eT>& X     = tmp.M;
00038   
00039   arma_debug_check( (X.n_elem < 1), "prod(): give object has no elements");
00040 
00041   
00042   if(dim == 0)  // traverse across rows (i.e. find the product in each column)
00043     {
00044     out.set_size(1, X.n_cols);
00045     
00046     for(u32 col=0; col<X.n_cols; ++col)
00047       {
00048       const eT* X_colptr = X.colptr(col);
00049       
00050       eT val = X_colptr[0];
00051       
00052       for(u32 row=1; row < X.n_rows; ++row)
00053         {
00054         val *= X_colptr[row];
00055         }
00056       
00057       out.at(0,col) = val;
00058       }
00059     }
00060   else  // traverse across columns (i.e. find the product in each row)
00061     {
00062     out.set_size(X.n_rows, 1);
00063     
00064     for(u32 row=0; row < X.n_rows; ++row)
00065       {
00066       eT val = X.at(row,0);
00067       
00068       for(u32 col=1; col < X.n_cols; ++col)
00069         {
00070         val *= X.at(row,col);
00071         }
00072     
00073       out.at(row,0) = val;
00074       }
00075     
00076     }
00077   
00078   }