From ad5995341f50f70b5f9667a5409d7c1d1005ab14 Mon Sep 17 00:00:00 2001 From: kortschak Date: Fri, 4 Aug 2017 12:02:16 +0930 Subject: [PATCH] mat: add TransposeVec --- mat/vector.go | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/mat/vector.go b/mat/vector.go index fe40a97c..bf96e830 100644 --- a/mat/vector.go +++ b/mat/vector.go @@ -18,13 +18,56 @@ var ( _ Reseter = vector ) -// Vector is a column vector. +// Vector is a vector. type Vector interface { Matrix AtVec(int) float64 Len() int } +// TransposeVec is a type for performing an implicit transpose of a Vector. +// It implements the Vector interface, returning values from the transpose +// of the vector within. +type TransposeVec struct { + Vector Vector +} + +// At returns the value of the element at row i and column j of the transposed +// matrix, that is, row j and column i of the Vector field. +func (t TransposeVec) At(i, j int) float64 { + return t.Vector.At(j, i) +} + +// Dims returns the dimensions of the transposed vector. +func (t TransposeVec) Dims() (r, c int) { + c, r = t.Vector.Dims() + return r, c +} + +// T performs an implicit transpose by returning the Vector field. +func (t TransposeVec) T() Matrix { + return t.Vector +} + +// Len returns the number of columns in the vector. +func (t TransposeVec) Len() int { + return t.Vector.Len() +} + +// TVec performs an implicit transpose by returning the Vector field. +func (t TransposeVec) TVec() Vector { + return t.Vector +} + +// Untranspose returns the Vector field. +func (t TransposeVec) Untranspose() Matrix { + return t.Vector +} + +func (t TransposeVec) UntransposeVec() Vector { + return t.Vector +} + // VecDense represents a column vector. type VecDense struct { mat blas64.Vector