Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00016
00021 template<typename T1>
00022 inline
00023 void
00024 op_sum::apply(Mat<typename T1::elem_type>& out, const Op<T1,op_sum>& in)
00025 {
00026 arma_extra_debug_sigprint();
00027
00028 const uword dim = in.aux_uword_a;
00029 arma_debug_check( (dim > 1), "sum(): incorrect usage. dim must be 0 or 1");
00030
00031 typedef typename T1::elem_type eT;
00032
00033 const unwrap_check<T1> tmp(in.m, out);
00034 const Mat<eT>& X = tmp.M;
00035
00036 const uword X_n_rows = X.n_rows;
00037 const uword X_n_cols = X.n_cols;
00038
00039 if(dim == 0)
00040 {
00041 out.set_size(1, X_n_cols);
00042
00043 eT* out_mem = out.memptr();
00044
00045 for(uword col=0; col<X_n_cols; ++col)
00046 {
00047 out_mem[col] = arrayops::accumulate(X.colptr(col), X_n_rows);
00048 }
00049 }
00050 else
00051 {
00052 out.set_size(X_n_rows, 1);
00053
00054 eT* out_mem = out.memptr();
00055
00056 for(uword row=0; row<X_n_rows; ++row)
00057 {
00058 eT val = eT(0);
00059
00060 for(uword col=0; col<X_n_cols; ++col)
00061 {
00062 val += X.at(row,col);
00063 }
00064
00065 out_mem[row] = val;
00066 }
00067 }
00068 }
00069
00070
00071