void Transpose(GArgReader& args) { GMatrix* pData = loadData(args.pop_string()); Holder<GMatrix> hData(pData); GMatrix* pTransposed = pData->transpose(); Holder<GMatrix> hTransposed(pTransposed); pTransposed->print(cout); }
void GGaussianProcess::trainInnerInner(const GMatrix& features, const GMatrix& labels) { clear(); GMatrix* pL; { // Compute the kernel matrix GMatrix k(features.rows(), features.rows()); for(size_t i = 0; i < features.rows(); i++) { GVec& row = k[i]; const GVec& a = features[i]; for(size_t j = 0; j < features.rows(); j++) { const GVec& b = features[j]; row[j] = m_weightsPriorVar * m_pKernel->apply(a, b); } } // Add the noise variance to the diagonal of the kernel matrix for(size_t i = 0; i < features.rows(); i++) k[i][i] += m_noiseVar; // Compute L pL = k.cholesky(true); } std::unique_ptr<GMatrix> hL(pL); // Compute the model m_pLInv = pL->pseudoInverse(); GMatrix* pTmp = GMatrix::multiply(*m_pLInv, labels, false, false); std::unique_ptr<GMatrix> hTmp(pTmp); GMatrix* pLTrans = pL->transpose(); std::unique_ptr<GMatrix> hLTrans(pLTrans); GMatrix* pLTransInv = pLTrans->pseudoInverse(); std::unique_ptr<GMatrix> hLTransInv(pLTransInv); m_pAlpha = GMatrix::multiply(*pLTransInv, *pTmp, false, false); GAssert(m_pAlpha->rows() == features.rows()); GAssert(m_pAlpha->cols() == labels.cols()); m_pStoredFeatures = new GMatrix(); m_pStoredFeatures->copy(&features); }