X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flinal%2Fmatrix.h;fp=source%2Flinal%2Fmatrix.h;h=a57ce08d68b78f6d2f49cd3bffbc16fbc223847f;hb=5797fe0a5296952cb8f8643fdc6cabddee19a554;hp=929c48247e517aa47d837df1438c94465e25064a;hpb=36c65e8612aa7209f50270474003a4b22d67042b;p=libs%2Fmath.git diff --git a/source/linal/matrix.h b/source/linal/matrix.h index 929c482..a57ce08 100644 --- a/source/linal/matrix.h +++ b/source/linal/matrix.h @@ -13,6 +13,9 @@ A general mathematical matrix with M rows and N columns. template class Matrix { +public: + typedef T ElementType; + private: T data[M*N]; @@ -25,11 +28,17 @@ public: static Matrix from_columns(const Vector *); static Matrix from_rows(const Vector *); + unsigned rows() const { return M; } + unsigned columns() const { return N; } + T &element(unsigned i, unsigned j) { return data[i+M*j]; } const T &element(unsigned i, unsigned j) const { return data[i+M*j]; } T &operator()(unsigned i, unsigned j) { return element(i, j); } const T &operator()(unsigned i, unsigned j) const { return element(i, j); } + template + Matrix select(const Vector &, const Vector &) const; + template Matrix block(unsigned, unsigned) const; @@ -84,6 +93,17 @@ inline Matrix Matrix::from_rows(const Vector *v) return m; } +template +template +inline Matrix Matrix::select(const Vector &rows, const Vector &cols) const +{ + Matrix r; + for(unsigned j=0; j template inline Matrix Matrix::block(unsigned y, unsigned x) const