MCPcopy Create free account
hub / github.com/cogentcore/core / ProjectCol

Method ProjectCol

tensor/stats/pca/svd.go:163–201  ·  view source on GitHub ↗

ProjectCol projects values from the given column of given table (via IndexView) onto the idx'th eigenvector (0 = largest eigenvalue, 1 = next, etc). Must have already called SVD() method.

(vals *[]float64, ix *table.IndexView, column string, idx int)

Source from the content-addressed store, hash-verified

161// onto the idx'th eigenvector (0 = largest eigenvalue, 1 = next, etc).
162// Must have already called SVD() method.
163func (svd *SVD) ProjectCol(vals *[]float64, ix *table.IndexView, column string, idx int) error {
164 col, err := ix.Table.ColumnByNameTry(column)
165 if err != nil {
166 return err
167 }
168 if svd.Vectors == nil {
169 return fmt.Errorf("SVD.ProjectCol Vectors are nil -- must call SVD first")
170 }
171 nr := svd.Vectors.DimSize(0)
172 if idx >= nr {
173 return fmt.Errorf("SVD.ProjectCol eigenvector index > rank of matrix")
174 }
175 cvec := make([]float64, nr)
176 // eidx := nr - 1 - idx // eigens in reverse order
177 vec := svd.Vectors.(*tensor.Float64)
178 for ri := 0; ri < nr; ri++ {
179 cvec[ri] = vec.Value([]int{ri, idx}) // vecs are in columns, reverse magnitude order
180 }
181 rows := ix.Len()
182 if len(*vals) != rows {
183 *vals = make([]float64, rows)
184 }
185 ln := col.Len()
186 sz := ln / col.DimSize(0) // size of cell
187 if sz != nr {
188 return fmt.Errorf("SVD.ProjectCol column cell size != svd eigenvectors")
189 }
190 rdim := []int{0}
191 for row := 0; row < rows; row++ {
192 sum := 0.0
193 rdim[0] = ix.Indexes[row]
194 rt := col.SubSpace(rdim)
195 for ci := 0; ci < sz; ci++ {
196 sum += cvec[ci] * rt.Float1D(ci)
197 }
198 (*vals)[row] = sum
199 }
200 return nil
201}
202
203// ProjectColToTable projects values from the given column of given table (via IndexView)
204// onto the given set of eigenvectors (idxs, 0 = largest eigenvalue, 1 = next, etc),

Callers 1

ProjectColToTableMethod · 0.95

Calls 7

ColumnByNameTryMethod · 0.80
ErrorfMethod · 0.65
DimSizeMethod · 0.65
ValueMethod · 0.65
LenMethod · 0.65
SubSpaceMethod · 0.65
Float1DMethod · 0.65

Tested by

no test coverage detected