00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034 #ifndef GROOVX_PKGS_MTX_MTXOPS_CC_UTC20050626084022_DEFINED
00035 #define GROOVX_PKGS_MTX_MTXOPS_CC_UTC20050626084022_DEFINED
00036
00037 #include "mtxops.h"
00038
00039 #include "mtx/arithfunctor.h"
00040 #include "mtx/mtx.h"
00041
00042 #include "rutz/error.h"
00043 #include "rutz/rand.h"
00044
00045 #include "rutz/trace.h"
00046
00047 mtx rand_mtx(int mrows, int ncols)
00048 {
00049 GVX_TRACE("rand_mtx");
00050
00051 static rutz::urand generator(rutz::default_rand_seed);
00052
00053 mtx result = mtx::uninitialized(mrows, ncols);
00054
00055 for (mtx::colmaj_iter
00056 itr = result.colmaj_begin_nc(),
00057 stop = result.colmaj_end_nc();
00058 itr != stop;
00059 ++itr)
00060 {
00061 *itr = generator.fdraw();
00062 }
00063
00064 return result;
00065 }
00066
00067 mtx squared(const mtx& src)
00068 {
00069 GVX_TRACE("squared");
00070
00071 mtx result(src);
00072
00073 result.apply(dash::square());
00074
00075 return result;
00076 }
00077
00078 mtx zeropad(const mtx& src, int new_mrows, int new_ncols,
00079 int* ppadtop, int* ppadleft)
00080 {
00081 GVX_TRACE("zeropad");
00082
00083 if (new_mrows < src.mrows() || new_ncols < src.ncols())
00084 throw rutz::error("zeropad(): new size must be >= old size",
00085 SRC_POS);
00086
00087 mtx result = mtx::zeros(new_mrows, new_ncols);
00088
00089 const int padtop = (new_mrows - src.mrows() + 1) / 2;
00090 const int padleft = (new_ncols - src.ncols() + 1) / 2;
00091
00092 if (ppadtop) *ppadtop = padtop;
00093 if (ppadleft) *ppadleft = padleft;
00094
00095 for (int col = 0; col < src.ncols(); ++col)
00096 {
00097 result.column(col + padleft)(range_n(padtop, src.mrows()))
00098 = src.column(col);
00099 }
00100
00101 return result;
00102 }
00103
00104 static const char __attribute__((used)) vcid_groovx_pkgs_mtx_mtxops_cc_utc20050626084022[] = "$Id: mtxops.cc 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00105 #endif // !GROOVX_PKGS_MTX_MTXOPS_CC_UTC20050626084022_DEFINED