Classes | Functions

Diagview

//! More...

Classes

class  diagview< eT >
 Class for storing data required to extract and set the diagonals of a matrix. More...

Functions

 diagview::~diagview ()
arma_inline diagview::diagview (const Mat< eT > &in_m, const u32 in_row_offset, const u32 in_col_offset, const u32 len)
arma_inline diagview::diagview (Mat< eT > &in_m, const u32 in_row_offset, const u32 in_col_offset, const u32 len)
template<typename T1 >
void diagview::operator= (const Base< eT, T1 > &x)
 set a diagonal of our matrix using data from a foreign object
void diagview::operator= (const diagview &x)
 set a diagonal of our matrix using a diagonal from a foreign matrix
static void diagview::extract (Mat< eT > &out, const diagview &in)
 //! extract a diagonal and store it as a column vector
static void diagview::plus_inplace (Mat< eT > &out, const diagview &in)
 X += Y.diagview(...).
static void diagview::minus_inplace (Mat< eT > &out, const diagview &in)
 X -= Y.diagview(...).
static void diagview::schur_inplace (Mat< eT > &out, const diagview &in)
 X = Y.submat(...).
static void diagview::div_inplace (Mat< eT > &out, const diagview &in)
 X /= Y.diagview(...).
arma_inline eT & diagview::operator[] (const u32 i)
arma_inline eT diagview::operator[] (const u32 i) const
arma_inline eT & diagview::at (const u32 in_n_row, const u32 in_n_col)
arma_inline eT diagview::at (const u32 in_n_row, const u32 in_n_col) const
arma_inline eT & diagview::operator() (const u32 i)
arma_inline eT diagview::operator() (const u32 i) const
arma_inline eT & diagview::operator() (const u32 in_n_row, const u32 in_n_col)
arma_inline eT diagview::operator() (const u32 in_n_row, const u32 in_n_col) const
void diagview::fill (const eT val)
void diagview::zeros ()
void diagview::ones ()

Detailed Description

//!


Function Documentation

template<typename eT >
diagview< eT >::~diagview (  )  [inline, inherited]

Definition at line 23 of file diagview_meat.hpp.

  {
  arma_extra_debug_sigprint();
  }

template<typename eT >
arma_inline diagview< eT >::diagview ( const Mat< eT > &  in_m,
const u32  in_row_offset,
const u32  in_col_offset,
const u32  len 
) [protected, inherited]

Definition at line 31 of file diagview_meat.hpp.

  : m(in_m)
  , m_ptr(0)
  , row_offset(in_row_offset)
  , col_offset(in_col_offset)
  , n_rows(in_len)
  , n_cols( (in_len > 0) ? 1 : 0 )
  , n_elem(in_len)
  {
  arma_extra_debug_sigprint();
  }

template<typename eT >
arma_inline diagview< eT >::diagview ( Mat< eT > &  in_m,
const u32  in_row_offset,
const u32  in_col_offset,
const u32  len 
) [protected, inherited]

Definition at line 47 of file diagview_meat.hpp.

  : m(in_m)
  , m_ptr(&in_m)
  , row_offset(in_row_offset)
  , col_offset(in_col_offset)
  , n_rows(in_len)
  , n_cols( (in_len > 0) ? 1 : 0 )
  , n_elem(in_len)
  {
  arma_extra_debug_sigprint();
  }

template<typename eT >
template<typename T1 >
void diagview< eT >::operator= ( const Base< eT, T1 > &  x  )  [inline, inherited]

set a diagonal of our matrix using data from a foreign object

Definition at line 66 of file diagview_meat.hpp.

References arma_check(), Mat< eT >::at(), diagview< eT >::col_offset, Base< elem_type, derived >::get_ref(), diagview< eT >::m_ptr, diagview< eT >::n_elem, and diagview< eT >::row_offset.

  {
  arma_extra_debug_sigprint();
  arma_check( (m_ptr == 0), "diagview::operator=(): matrix is read only");
  
  const unwrap<T1> tmp(o.get_ref());
  const Mat<eT>& x = tmp.M;
  
  diagview& t = *this;
  
  arma_debug_check( !x.is_vec(), "diagview::operator=(): need a vector");
  arma_debug_check( (t.n_elem != x.n_elem), "diagview::operator=(): diagonal and given vector have incompatible lengths");
  
  Mat<eT>& t_m = *(t.m_ptr);
  
  for(u32 i=0; i<n_elem; ++i)
    {
    t_m.at(i+row_offset, i+col_offset) = x.mem[i];
    }
  
  }

template<typename eT >
void diagview< eT >::operator= ( const diagview< eT > &  x  )  [inline, inherited]

set a diagonal of our matrix using a diagonal from a foreign matrix

Definition at line 94 of file diagview_meat.hpp.

References arma_check(), Mat< eT >::at(), diagview< eT >::col_offset, diagview< eT >::m, diagview< eT >::m_ptr, diagview< eT >::n_elem, and diagview< eT >::row_offset.

  {
  arma_extra_debug_sigprint();
  arma_check( (m_ptr == 0), "diagview::operator=(): matrix is read only");
  
  diagview<eT>& t = *this;
  
  arma_debug_check( (t.n_elem != x.n_elem), "diagview::operator=(): diagonals have incompatible lengths");
  
        Mat<eT>& t_m = *(t.m_ptr);
  const Mat<eT>& x_m = x.m;
  
  for(u32 i=0; i<n_elem; ++i)
    {
    t_m.at(i+t.row_offset, i+t.col_offset) = x_m.at(i+x.row_offset, i+x.col_offset);
    }
    
  }

template<typename eT >
void diagview< eT >::extract ( Mat< eT > &  out,
const diagview< eT > &  in 
) [inline, static, inherited]

//! extract a diagonal and store it as a column vector

Definition at line 120 of file diagview_meat.hpp.

References Mat< eT >::at(), diagview< eT >::col_offset, diagview< eT >::m, Mat< eT >::memptr(), diagview< eT >::n_elem, diagview< eT >::row_offset, and Mat< eT >::set_size().

  {
  arma_extra_debug_sigprint();
  
  const Mat<eT>& in_m = in.m;
  const bool alias = (&actual_out == &in_m);
  
  Mat<eT>* tmp = (alias) ? new Mat<eT> : 0;
  Mat<eT>& out = (alias) ? (*tmp)      : actual_out;
  
  const u32 in_n_elem     = in.n_elem;
  const u32 in_row_offset = in.row_offset;
  const u32 in_col_offset = in.col_offset;
  
  out.set_size(in_n_elem,1);
  eT* out_mem = out.memptr();
  
  for(u32 i=0; i<in_n_elem; ++i)
    {
    out_mem[i] = in_m.at(i+in_row_offset, i+in_col_offset);
    }
  
  
  if(alias)
    {
    actual_out = out;
    delete tmp;
    }
  
  }

template<typename eT >
void diagview< eT >::plus_inplace ( Mat< eT > &  out,
const diagview< eT > &  in 
) [inline, static, inherited]

X += Y.diagview(...).

Definition at line 157 of file diagview_meat.hpp.

References Mat< eT >::at(), diagview< eT >::col_offset, diagview< eT >::m, Mat< eT >::memptr(), Mat< eT >::n_cols, diagview< eT >::n_elem, diagview< eT >::n_rows, Mat< eT >::n_rows, and diagview< eT >::row_offset.

  {
  arma_extra_debug_sigprint();
  
  arma_debug_assert_same_size(out.n_rows, out.n_cols, in.n_rows, 1, "matrix addition");
  
  const Mat<eT>& in_m = in.m;
  
  const u32 in_n_elem     = in.n_elem;
  const u32 in_row_offset = in.row_offset;
  const u32 in_col_offset = in.col_offset;
  
  eT* out_mem = out.memptr();
  
  for(u32 i=0; i<in_n_elem; ++i)
    {
    out_mem[i] += in_m.at(i+in_row_offset, i+in_col_offset);
    }
  }

template<typename eT >
void diagview< eT >::minus_inplace ( Mat< eT > &  out,
const diagview< eT > &  in 
) [inline, static, inherited]

X -= Y.diagview(...).

Definition at line 183 of file diagview_meat.hpp.

References Mat< eT >::at(), diagview< eT >::col_offset, diagview< eT >::m, Mat< eT >::memptr(), Mat< eT >::n_cols, diagview< eT >::n_elem, diagview< eT >::n_rows, Mat< eT >::n_rows, and diagview< eT >::row_offset.

  {
  arma_extra_debug_sigprint();
  
  arma_debug_assert_same_size(out.n_rows, out.n_cols, in.n_rows, 1, "matrix subtraction");
  
  const Mat<eT>& in_m = in.m;
  
  const u32 in_n_elem     = in.n_elem;
  const u32 in_row_offset = in.row_offset;
  const u32 in_col_offset = in.col_offset;
  
  eT* out_mem = out.memptr();
  
  for(u32 i=0; i<in_n_elem; ++i)
    {
    out_mem[i] -= in_m.at(i+in_row_offset, i+in_col_offset);
    }
  }

template<typename eT >
void diagview< eT >::schur_inplace ( Mat< eT > &  out,
const diagview< eT > &  in 
) [inline, static, inherited]

X = Y.submat(...).

Definition at line 209 of file diagview_meat.hpp.

References Mat< eT >::at(), diagview< eT >::col_offset, diagview< eT >::m, Mat< eT >::memptr(), Mat< eT >::n_cols, diagview< eT >::n_elem, diagview< eT >::n_rows, Mat< eT >::n_rows, and diagview< eT >::row_offset.

  {
  arma_extra_debug_sigprint();
  
  arma_debug_assert_same_size(out.n_rows, out.n_cols, in.n_rows, 1, "element-wise matrix multiplication");
  
  const Mat<eT>& in_m = in.m;
  
  const u32 in_n_elem     = in.n_elem;
  const u32 in_row_offset = in.row_offset;
  const u32 in_col_offset = in.col_offset;
  
  eT* out_mem = out.memptr();
  
  for(u32 i=0; i<in_n_elem; ++i)
    {
    out_mem[i] *= in_m.at(i+in_row_offset, i+in_col_offset);
    }
  }

template<typename eT >
void diagview< eT >::div_inplace ( Mat< eT > &  out,
const diagview< eT > &  in 
) [inline, static, inherited]

X /= Y.diagview(...).

Definition at line 235 of file diagview_meat.hpp.

References Mat< eT >::at(), diagview< eT >::col_offset, diagview< eT >::m, Mat< eT >::memptr(), Mat< eT >::n_cols, diagview< eT >::n_elem, diagview< eT >::n_rows, Mat< eT >::n_rows, and diagview< eT >::row_offset.

  {
  arma_extra_debug_sigprint();
  
  arma_debug_assert_same_size(out.n_rows, out.n_cols, in.n_rows, 1, "element-wise matrix division");
  
  const Mat<eT>& in_m = in.m;
  
  const u32 in_n_elem     = in.n_elem;
  const u32 in_row_offset = in.row_offset;
  const u32 in_col_offset = in.col_offset;
  
  eT* out_mem = out.memptr();
  
  for(u32 i=0; i<in_n_elem; ++i)
    {
    out_mem[i] /= in_m.at(i+in_row_offset, i+in_col_offset);
    }
  }

template<typename eT >
arma_inline eT & diagview< eT >::operator[] ( const u32  i  )  [inherited]

Definition at line 260 of file diagview_meat.hpp.

References diagview< eT >::col_offset, and diagview< eT >::row_offset.

  {
  return (*m_ptr).at(i+row_offset, i+col_offset);
  }

template<typename eT >
arma_inline eT diagview< eT >::operator[] ( const u32  i  )  const [inherited]

Definition at line 270 of file diagview_meat.hpp.

References diagview< eT >::col_offset, diagview< eT >::m, and diagview< eT >::row_offset.

  {
  return m.at(i+row_offset, i+col_offset);
  }

template<typename eT >
arma_inline eT & diagview< eT >::at ( const u32  in_n_row,
const u32  in_n_col 
) [inherited]

Definition at line 280 of file diagview_meat.hpp.

References diagview< eT >::col_offset, and diagview< eT >::row_offset.

  {
  return (*m_ptr).at(row+row_offset, row+col_offset);
  }

template<typename eT >
arma_inline eT diagview< eT >::at ( const u32  in_n_row,
const u32  in_n_col 
) const [inherited]

Definition at line 290 of file diagview_meat.hpp.

References diagview< eT >::col_offset, diagview< eT >::m, and diagview< eT >::row_offset.

  {
  return m.at(row+row_offset, row+col_offset);
  }

template<typename eT >
arma_inline eT & diagview< eT >::operator() ( const u32  i  )  [inherited]

Definition at line 300 of file diagview_meat.hpp.

References arma_check(), diagview< eT >::col_offset, diagview< eT >::m_ptr, diagview< eT >::n_elem, and diagview< eT >::row_offset.

  {
  arma_check( (m_ptr == 0), "diagview::operator(): matrix is read only");
  arma_debug_check( (i >= n_elem), "diagview::operator(): out of bounds" );
  
  return (*m_ptr).at(i+row_offset, i+col_offset);
  }

template<typename eT >
arma_inline eT diagview< eT >::operator() ( const u32  i  )  const [inherited]

Definition at line 313 of file diagview_meat.hpp.

References diagview< eT >::col_offset, diagview< eT >::m, diagview< eT >::n_elem, and diagview< eT >::row_offset.

  {
  arma_debug_check( (i >= n_elem), "diagview::operator(): out of bounds" );
  
  return m.at(i+row_offset, i+col_offset);
  }

template<typename eT >
arma_inline eT & diagview< eT >::operator() ( const u32  in_n_row,
const u32  in_n_col 
) [inherited]

Definition at line 325 of file diagview_meat.hpp.

References arma_check(), diagview< eT >::col_offset, diagview< eT >::m_ptr, diagview< eT >::n_elem, and diagview< eT >::row_offset.

  {
  arma_check( (m_ptr == 0), "diagview::operator(): matrix is read only");
  arma_debug_check( ((row >= n_elem) || (col > 0)), "diagview::operator(): out of bounds" );
  
  return (*m_ptr).at(row+row_offset, row+col_offset);
  }

template<typename eT >
arma_inline eT diagview< eT >::operator() ( const u32  in_n_row,
const u32  in_n_col 
) const [inherited]

Definition at line 338 of file diagview_meat.hpp.

References diagview< eT >::col_offset, diagview< eT >::m, diagview< eT >::n_elem, and diagview< eT >::row_offset.

  {
  arma_debug_check( ((row >= n_elem) || (col > 0)), "diagview::operator(): out of bounds" );
  
  return m.at(row+row_offset, row+col_offset);
  }

template<typename eT >
void diagview< eT >::fill ( const eT  val  )  [inline, inherited]

Definition at line 350 of file diagview_meat.hpp.

References arma_check(), Mat< eT >::at(), diagview< eT >::col_offset, diagview< eT >::m_ptr, diagview< eT >::n_elem, and diagview< eT >::row_offset.

  {
  arma_extra_debug_sigprint();
  arma_check( (m_ptr == 0), "diagview::fill(): matrix is read only");
  
  Mat<eT>& x = (*m_ptr);
  
  for(u32 i=0; i<n_elem; ++i)
    {
    x.at(i+row_offset, i+col_offset) = val;
    }
  }

template<typename eT >
void diagview< eT >::zeros (  )  [inline, inherited]

Definition at line 368 of file diagview_meat.hpp.

References arma_check(), Mat< eT >::at(), diagview< eT >::col_offset, diagview< eT >::m_ptr, diagview< eT >::n_elem, and diagview< eT >::row_offset.

  {
  arma_extra_debug_sigprint();
  arma_check( (m_ptr == 0), "diagview::zeros(): matrix is read only");
  
  Mat<eT>& x = (*m_ptr);
  
  for(u32 i=0; i<n_elem; ++i)
    {
    x.at(i+row_offset, i+col_offset) = eT(0);
    }
  }

template<typename eT >
void diagview< eT >::ones (  )  [inline, inherited]

Definition at line 386 of file diagview_meat.hpp.

References arma_check(), Mat< eT >::at(), diagview< eT >::col_offset, diagview< eT >::m_ptr, diagview< eT >::n_elem, and diagview< eT >::row_offset.

  {
  arma_extra_debug_sigprint();
  arma_check( (m_ptr == 0), "diagview::ones(): matrix is read only");
  
  Mat<eT>& x = (*m_ptr);
  
  for(u32 i=0; i<n_elem; ++i)
    {
    x.at(i+row_offset, i+col_offset) = eT(1);
    }
  }