forked from james-bowman/nlp
/
transposer.go
39 lines (33 loc) · 1.22 KB
/
transposer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package nlp
import (
"github.com/james-bowman/sparse"
"gonum.org/v1/gonum/mat"
)
//TransposeTransformer simply transposes the given matrix. Created as a transformer for easy use within a pipeline
type TransposeTransformer struct {
}
// NewTransposeTransformer constructs a new TransposeTransformer.
func NewTransposeTransformer() *TransposeTransformer {
return &TransposeTransformer{}
}
// Fit does not alter the transformer, it is included for compatibility
func (t *TransposeTransformer) Fit(matrix mat.Matrix) Transformer {
return t
}
// Transform transposes the matrix and returns the result
func (t *TransposeTransformer) Transform(matrix mat.Matrix) (mat.Matrix, error) {
if t, isTypeConv := matrix.(sparse.TypeConverter); isTypeConv {
matrix = t.ToCSR()
}
var transposed sparse.CSR
transposed.Clone(matrix.T().(*sparse.CSC).ToCSR())
return &transposed, nil
}
// FitTransform is exactly equivalent to calling Fit() followed by Transform() on the
// same matrix. The returned matrix is a sparse matrix type.
func (t *TransposeTransformer) FitTransform(matrix mat.Matrix) (mat.Matrix, error) {
if t, isTypeConv := matrix.(sparse.TypeConverter); isTypeConv {
matrix = t.ToCSR()
}
return t.Fit(matrix).Transform(matrix)
}