inline void op_sp_plus::apply(SpMat<typename T1::elem_type>& out, const SpToDOp<T1,op_sp_plus>& in) { arma_extra_debug_sigprint(); typedef typename T1::elem_type eT; // Note that T1 will be a sparse type, so we use SpProxy. const SpProxy<T1> proxy(in.m); const uword n_rows = proxy.get_n_rows(); const uword n_cols = proxy.get_n_cols(); out.set_size(n_rows, n_cols); const eT k = in.aux; // We have to loop over all the elements. for(uword c = 0; c < n_cols; ++c) for(uword r = 0; r < n_rows; ++r) { out.at(r, c) = proxy.at(r, c) + k; } }
inline void op_sp_plus::apply_inside_schur(SpMat<eT>& out, const T2& x, const SpToDOp<T3, op_sp_plus>& y) { arma_extra_debug_sigprint(); const SpProxy<T2> proxy2(x); const SpProxy<T3> proxy3(y.m); arma_debug_assert_same_size(proxy2.get_n_rows(), proxy2.get_n_cols(), proxy3.get_n_rows(), proxy3.get_n_cols(), "element-wise multiplication"); out.zeros(proxy2.get_n_rows(), proxy2.get_n_cols()); typename SpProxy<T2>::const_iterator_type it = proxy2.begin(); typename SpProxy<T2>::const_iterator_type it_end = proxy2.end(); const eT k = y.aux; for(; it != it_end; ++it) { const uword it_row = it.row(); const uword it_col = it.col(); out.at(it_row, it_col) = (*it) * (proxy3.at(it_row, it_col) + k); } }
inline void spdiagview<eT>::operator/=(const SpBase<eT,T1>& o) { arma_extra_debug_sigprint(); spdiagview<eT>& d = *this; SpMat<eT>& d_m = const_cast< SpMat<eT>& >(d.m); const uword d_n_elem = d.n_elem; const uword d_row_offset = d.row_offset; const uword d_col_offset = d.col_offset; const SpProxy<T1> P( o.get_ref() ); arma_debug_check ( ( (d_n_elem != P.get_n_elem()) || ((P.get_n_rows() != 1) && (P.get_n_cols() != 1)) ), "spdiagview: given object has incompatible size" ); if( SpProxy<T1>::must_use_iterator || P.is_alias(d_m) ) { const SpMat<eT> tmp(P.Q); if(tmp.n_cols == 1) { for(uword i=0; i < d_n_elem; ++i) { d_m.at(i + d_row_offset, i + d_col_offset) /= tmp.at(i,0); } } else if(tmp.n_rows == 1) { for(uword i=0; i < d_n_elem; ++i) { d_m.at(i + d_row_offset, i + d_col_offset) /= tmp.at(0,i); } } } else { if(P.get_n_cols() == 1) { for(uword i=0; i < d_n_elem; ++i) { d_m.at(i + d_row_offset, i + d_col_offset) /= P.at(i,0); } } else if(P.get_n_rows() == 1) { for(uword i=0; i < d_n_elem; ++i) { d_m.at(i + d_row_offset, i + d_col_offset) /= P.at(0,i); } } } }