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

Method ProjectCol

tensor/stats/pca/pca.go:151–189  ·  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 PCA() method.

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

Source from the content-addressed store, hash-verified

149// onto the idx'th eigenvector (0 = largest eigenvalue, 1 = next, etc).
150// Must have already called PCA() method.
151func (pa *PCA) ProjectCol(vals *[]float64, ix *table.IndexView, column string, idx int) error {
152 col, err := ix.Table.ColumnByNameTry(column)
153 if err != nil {
154 return err
155 }
156 if pa.Vectors == nil {
157 return fmt.Errorf("PCA.ProjectCol Vectors are nil -- must call PCA first")
158 }
159 nr := pa.Vectors.DimSize(0)
160 if idx >= nr {
161 return fmt.Errorf("PCA.ProjectCol eigenvector index > rank of matrix")
162 }
163 cvec := make([]float64, nr)
164 eidx := nr - 1 - idx // eigens in reverse order
165 vec := pa.Vectors.(*tensor.Float64)
166 for ri := 0; ri < nr; ri++ {
167 cvec[ri] = vec.Value([]int{ri, eidx}) // vecs are in columns, reverse magnitude order
168 }
169 rows := ix.Len()
170 if len(*vals) != rows {
171 *vals = make([]float64, rows)
172 }
173 ln := col.Len()
174 sz := ln / col.DimSize(0) // size of cell
175 if sz != nr {
176 return fmt.Errorf("PCA.ProjectCol column cell size != pca eigenvectors")
177 }
178 rdim := []int{0}
179 for row := 0; row < rows; row++ {
180 sum := 0.0
181 rdim[0] = ix.Indexes[row]
182 rt := col.SubSpace(rdim)
183 for ci := 0; ci < sz; ci++ {
184 sum += cvec[ci] * rt.Float1D(ci)
185 }
186 (*vals)[row] = sum
187 }
188 return nil
189}
190
191// ProjectColToTable projects values from the given column of given table (via IndexView)
192// 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