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)
| 149 | // onto the idx'th eigenvector (0 = largest eigenvalue, 1 = next, etc). |
| 150 | // Must have already called PCA() method. |
| 151 | func (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), |
no test coverage detected