X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flinal%2Fmatrix.h;h=2711d40a637489c1bfa3cc9676c2fb8043f978d4;hb=9ab061034720c1c0db4e8bff5dae4191ccd2a26f;hp=a57ce08d68b78f6d2f49cd3bffbc16fbc223847f;hpb=5797fe0a5296952cb8f8643fdc6cabddee19a554;p=libs%2Fmath.git diff --git a/source/linal/matrix.h b/source/linal/matrix.h index a57ce08..2711d40 100644 --- a/source/linal/matrix.h +++ b/source/linal/matrix.h @@ -2,6 +2,7 @@ #define MSP_LINAL_MATRIX_H_ #include +#include #include "vector.h" namespace Msp { @@ -36,6 +37,9 @@ public: T &operator()(unsigned i, unsigned j) { return element(i, j); } const T &operator()(unsigned i, unsigned j) const { return element(i, j); } + Vector column(unsigned i) const { return Vector(data+M*i); } + Vector row(unsigned i) const { return Vector(data+i, M); } + template Matrix select(const Vector &, const Vector &) const; @@ -95,12 +99,12 @@ inline Matrix Matrix::from_rows(const Vector *v) template template -inline Matrix Matrix::select(const Vector &rows, const Vector &cols) const +inline Matrix Matrix::select(const Vector &row_indices, const Vector &col_indices) const { Matrix r; for(unsigned j=0; j transpose(const Matrix &m) return r; } +template +inline std::ostream &operator<<(std::ostream &s, const Matrix &m) +{ + s << "Matrix" << M << 'x' << N << '('; + for(unsigned i=0; i