本文整理汇总了C++中GMatrix::rows方法的典型用法代码示例。如果您正苦于以下问题:C++ GMatrix::rows方法的具体用法?C++ GMatrix::rows怎么用?C++ GMatrix::rows使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GMatrix
的用法示例。
在下文中一共展示了GMatrix::rows方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: split
void split(GArgReader& args)
{
// Load
GMatrix* pData = loadData(args.pop_string());
Holder<GMatrix> hData(pData);
int pats = (int)pData->rows() - args.pop_uint();
if(pats < 0)
ThrowError("out of range. The data only has ", to_str(pData->rows()), " rows.");
const char* szFilename1 = args.pop_string();
const char* szFilename2 = args.pop_string();
unsigned int nSeed = getpid() * (unsigned int)time(NULL);
bool shouldShuffle = false;
while(args.size() > 0){
if(args.if_pop("-shuffle")){
shouldShuffle = true;
}else if(args.if_pop("-seed")){
nSeed = args.pop_uint();
}else
ThrowError("Invalid option: ", args.peek());
}
// Shuffle if necessary
GRand rng(nSeed);
if(shouldShuffle){
pData->shuffle(rng);
}
// Split
GMatrix other(pData->relation());
pData->splitBySize(&other, pats);
pData->saveArff(szFilename1);
other.saveArff(szFilename2);
}
示例2: AddIndexAttribute
void AddIndexAttribute(GArgReader& args)
{
// Parse args
const char* filename = args.pop_string();
double nStartValue = 0.0;
double nIncrement = 1.0;
while(args.size() > 0)
{
if(args.if_pop("-start"))
nStartValue = args.pop_double();
else if(args.if_pop("-increment"))
nIncrement = args.pop_double();
else
ThrowError("Invalid option: ", args.peek());
}
GMatrix* pData = loadData(filename);
Holder<GMatrix> hData(pData);
GArffRelation* pIndexRelation = new GArffRelation();
pIndexRelation->addAttribute("index", 0, NULL);
sp_relation pIndexRel = pIndexRelation;
GMatrix indexes(pIndexRel);
indexes.newRows(pData->rows());
for(size_t i = 0; i < pData->rows(); i++)
indexes.row(i)[0] = nStartValue + i * nIncrement;
GMatrix* pUnified = GMatrix::mergeHoriz(&indexes, pData);
Holder<GMatrix> hUnified(pUnified);
pUnified->print(cout);
}
示例3: neighbors
void neighbors(GArgReader& args)
{
// Load the data
GMatrix* pData = loadData(args.pop_string());
Holder<GMatrix> hData(pData);
int neighborCount = args.pop_uint();
// Find the neighbors
GKdTree neighborFinder(pData, neighborCount, NULL, true);
GTEMPBUF(size_t, neighbors, neighborCount);
GTEMPBUF(double, distances, neighborCount);
double sumClosest = 0;
double sumAll = 0;
for(size_t i = 0; i < pData->rows(); i++)
{
neighborFinder.neighbors(neighbors, distances, i);
neighborFinder.sortNeighbors(neighbors, distances);
sumClosest += sqrt(distances[0]);
for(int j = 0; j < neighborCount; j++)
sumAll += sqrt(distances[j]);
}
cout.precision(14);
cout << "average closest neighbor distance = " << (sumClosest / pData->rows()) << "\n";
cout << "average neighbor distance = " << (sumAll / (pData->rows() * neighborCount)) << "\n";
}
示例4: DropMissingValues
void DropMissingValues(GArgReader& args)
{
GMatrix* pData = loadData(args.pop_string());
Holder<GMatrix> hData(pData);
GRelation* pRelation = pData->relation().get();
size_t dims = pRelation->size();
for(size_t i = pData->rows() - 1; i < pData->rows(); i--)
{
double* pPat = pData->row(i);
bool drop = false;
for(size_t j = 0; j < dims; j++)
{
if(pRelation->valueCount(j) == 0)
{
if(pPat[j] == UNKNOWN_REAL_VALUE)
{
drop = true;
break;
}
}
else
{
if(pPat[j] == UNKNOWN_DISCRETE_VALUE)
{
drop = true;
break;
}
}
}
if(drop)
pData->deleteRow(i);
}
pData->print(cout);
}
示例5: trainInner
// virtual
void GGaussianProcess::trainInner(const GMatrix& features, const GMatrix& labels)
{
if(!features.relation().areContinuous())
throw Ex("GGaussianProcess only supports continuous features. Perhaps you should wrap it in a GAutoFilter.");
if(!labels.relation().areContinuous())
throw Ex("GGaussianProcess only supports continuous labels. Perhaps you should wrap it in a GAutoFilter.");
if(features.rows() <= m_maxSamples)
{
trainInnerInner(features, labels);
return;
}
GMatrix f(features.relation().clone());
GReleaseDataHolder hF(&f);
GMatrix l(labels.relation().clone());
GReleaseDataHolder hL(&l);
for(size_t i = 0; i < features.rows(); i++)
{
f.takeRow((GVec*)&features[i]);
l.takeRow((GVec*)&labels[i]);
}
while(f.rows() > m_maxSamples)
{
size_t i = (size_t)m_rand.next(f.rows());
f.releaseRow(i);
l.releaseRow(i);
}
trainInnerInner(f, l);
}
示例6: matrix_not_symmetric
/***********************************************************************//**
* @brief GMatrix to GSymMatrix storage class convertor
*
* @param[in] matrix General matrix (GMatrix).
*
* @exception GException::matrix_not_symmetric
* Matrix is not symmetric.
*
* Converts a general matrix into the symmetric storage class. If the input
* matrix is not symmetric, an exception is thrown.
***************************************************************************/
GSymMatrix::GSymMatrix(const GMatrix& matrix)
{
// Initialise class members for clean destruction
init_members();
// Allocate matrix memory
alloc_members(matrix.rows(), matrix.cols());
// Fill matrix
for (int col = 0; col < matrix.cols(); ++col) {
for (int row = col; row < matrix.rows(); ++row) {
double value_ll = matrix(row,col);
double value_ur = matrix(col,row);
if (value_ll != value_ur) {
throw GException::matrix_not_symmetric(G_CAST_MATRIX,
matrix.rows(),
matrix.cols());
}
(*this)(row, col) = matrix(row, col);
}
}
// Return
return;
}
示例7: autoCorrelation
void autoCorrelation(GArgReader& args)
{
GMatrix* pData = loadData(args.pop_string());
Holder<GMatrix> hData(pData);
size_t lag = std::min((size_t)256, pData->rows() / 2);
size_t dims = pData->cols();
GTEMPBUF(double, mean, dims);
pData->centroid(mean);
GMatrix ac(0, dims + 1);
for(size_t i = 1; i <= lag; i++)
{
double* pRow = ac.newRow();
*(pRow++) = (double)i;
for(size_t j = 0; j < dims; j++)
{
*pRow = 0;
size_t k;
for(k = 0; k + i < pData->rows(); k++)
{
double* pA = pData->row(k);
double* pB = pData->row(k + i);
*pRow += (pA[j] - mean[j]) * (pB[j] - mean[j]);
}
*pRow /= k;
pRow++;
}
}
ac.print(cout);
}
示例8: plot_it
void plot_it(const char* filename, GNeuralNet& nn, GMatrix& trainFeat, GMatrix& trainLab, GMatrix& testFeat, GMatrix& testLab)
{
GSVG svg(1000, 500);
double xmin = trainFeat[0][0];
double xmax = testFeat[testFeat.rows() - 1][0];
svg.newChart(xmin, std::min(trainLab.columnMin(0), testLab.columnMin(0)), xmax, std::max(trainLab.columnMax(0), testLab.columnMax(0)));
svg.horizMarks(20);
svg.vertMarks(20);
double prevx = xmin;
double prevy = 0.0;
double step = (xmax - xmin) / 500.0;
GVec x(1);
GVec y(1);
for(x[0] = prevx; x[0] < xmax; x[0] += step)
{
nn.predict(x, y);
if(prevx != x[0])
svg.line(prevx, prevy, x[0], y[0], 0.3);
prevx = x[0];
prevy = y[0];
}
for(size_t i = 0; i < trainLab.rows(); i++)
svg.dot(trainFeat[i][0], trainLab[i][0], 0.4, 0xff000080);
for(size_t i = 0; i < testLab.rows(); i++)
svg.dot(testFeat[i][0], testLab[i][0], 0.4, 0xff800000);
std::ofstream ofs;
ofs.open(filename);
svg.print(ofs);
}
示例9: getFinalBeliefs
/// Compute the anticipated belief vector that will result if the specified plan is executed.
void TransitionModel::getFinalBeliefs(const GVec& beliefs, const GMatrix& plan, GVec& outFinalBeliefs)
{
if(plan.rows() > 0)
anticipateNextBeliefs(beliefs, plan[0], outFinalBeliefs);
for(size_t i = 1; i < plan.rows(); i++) {
anticipateNextBeliefs(outFinalBeliefs, plan[i], outFinalBeliefs);
}
}
示例10: dropRows
void dropRows(GArgReader& args)
{
GMatrix* pData = loadData(args.pop_string());
Holder<GMatrix> hData(pData);
size_t newSize = args.pop_uint();
while(pData->rows() > newSize)
pData->deleteRow(pData->rows() - 1);
pData->print(cout);
}
示例11: squaredDistance
void squaredDistance(GArgReader& args)
{
GMatrix* pA = loadData(args.pop_string());
Holder<GMatrix> hA(pA);
GMatrix* pB = loadData(args.pop_string());
Holder<GMatrix> hB(pB);
double d = pA->sumSquaredDifference(*pB, false);
cout << "Sum squared distance: " << d << "\n";
cout << "Mean squared distance: " << (d / pA->rows()) << "\n";
cout << "Root mean squared distance: " << sqrt(d / pA->rows()) << "\n";
}
示例12: GNaiveBayes_testMath
void GNaiveBayes_testMath()
{
const char* trainFile =
"@RELATION test\n"
"@ATTRIBUTE a {t,f}\n"
"@ATTRIBUTE b {r,g,b}\n"
"@ATTRIBUTE c {y,n}\n"
"@DATA\n"
"t,r,y\n"
"f,r,n\n"
"t,g,y\n"
"f,g,y\n"
"f,g,n\n"
"t,r,n\n"
"t,r,y\n"
"t,b,y\n"
"f,r,y\n"
"f,g,n\n"
"f,b,y\n"
"t,r,n\n";
GMatrix train;
train.parseArff(trainFile, strlen(trainFile));
GMatrix* pFeatures = train.cloneSub(0, 0, train.rows(), 2);
std::unique_ptr<GMatrix> hFeatures(pFeatures);
GMatrix* pLabels = train.cloneSub(0, 2, train.rows(), 1);
std::unique_ptr<GMatrix> hLabels(pLabels);
GNaiveBayes nb;
nb.setEquivalentSampleSize(0.0);
nb.train(*pFeatures, *pLabels);
GPrediction out;
GVec pat(2);
pat[0] = 0; pat[1] = 0;
nb.predictDistribution(pat, &out);
GNaiveBayes_CheckResults(7.0/12.0, 4.0/7.0*3.0/7.0, 5.0/12.0, 2.0/5.0*3.0/5.0, &out);
pat[0] = 0; pat[1] = 1;
nb.predictDistribution(pat, &out);
GNaiveBayes_CheckResults(7.0/12.0, 4.0/7.0*2.0/7.0, 5.0/12.0, 2.0/5.0*2.0/5.0, &out);
pat[0] = 0; pat[1] = 2;
nb.predictDistribution(pat, &out);
GNaiveBayes_CheckResults(7.0/12.0, 4.0/7.0*2.0/7.0, 5.0/12.0, 2.0/5.0*0.0/5.0, &out);
pat[0] = 1; pat[1] = 0;
nb.predictDistribution(pat, &out);
GNaiveBayes_CheckResults(7.0/12.0, 3.0/7.0*3.0/7.0, 5.0/12.0, 3.0/5.0*3.0/5.0, &out);
pat[0] = 1; pat[1] = 1;
nb.predictDistribution(pat, &out);
GNaiveBayes_CheckResults(7.0/12.0, 3.0/7.0*2.0/7.0, 5.0/12.0, 3.0/5.0*2.0/5.0, &out);
pat[0] = 1; pat[1] = 2;
nb.predictDistribution(pat, &out);
GNaiveBayes_CheckResults(7.0/12.0, 3.0/7.0*2.0/7.0, 5.0/12.0, 3.0/5.0*0.0/5.0, &out);
}
示例13: ManifoldSculpting
void ManifoldSculpting(GArgReader& args)
{
// Load the file and params
GMatrix* pData = loadData(args.pop_string());
Holder<GMatrix> hData(pData);
unsigned int nSeed = getpid() * (unsigned int)time(NULL);
GRand prng(nSeed);
GNeighborFinder* pNF = instantiateNeighborFinder(pData, &prng, args);
Holder<GNeighborFinder> hNF(pNF);
size_t targetDims = args.pop_uint();
// Parse Options
const char* szPreprocessedData = NULL;
double scaleRate = 0.999;
while(args.size() > 0)
{
if(args.if_pop("-seed"))
prng.setSeed(args.pop_uint());
else if(args.if_pop("-continue"))
szPreprocessedData = args.pop_string();
else if(args.if_pop("-scalerate"))
scaleRate = args.pop_double();
else
throw Ex("Invalid option: ", args.peek());
}
// Load the hint data
GMatrix* pDataHint = NULL;
Holder<GMatrix> hDataHint(NULL);
if(szPreprocessedData)
{
pDataHint = loadData(szPreprocessedData);
hDataHint.reset(pDataHint);
if(pDataHint->relation()->size() != targetDims)
throw Ex("Wrong number of dims in the hint data");
if(pDataHint->rows() != pData->rows())
throw Ex("Wrong number of patterns in the hint data");
}
// Transform the data
GManifoldSculpting transform(pNF->neighborCount(), targetDims, &prng);
transform.setSquishingRate(scaleRate);
if(pDataHint)
transform.setPreprocessedData(hDataHint.release());
transform.setNeighborFinder(pNF);
GMatrix* pDataAfter = transform.doit(*pData);
Holder<GMatrix> hDataAfter(pDataAfter);
pDataAfter->print(cout);
}
示例14: singularValueDecomposition
void singularValueDecomposition(GArgReader& args)
{
// Load
GMatrix* pData = loadData(args.pop_string());
Holder<GMatrix> hData(pData);
// Parse options
string ufilename = "u.arff";
string sigmafilename;
string vfilename = "v.arff";
int maxIters = 100;
while(args.size() > 0)
{
if(args.if_pop("-ufilename"))
ufilename = args.pop_string();
else if(args.if_pop("-sigmafilename"))
sigmafilename = args.pop_string();
else if(args.if_pop("-vfilename"))
vfilename = args.pop_string();
else if(args.if_pop("-maxiters"))
maxIters = args.pop_uint();
else
ThrowError("Invalid option: ", args.peek());
}
GMatrix* pU;
double* pDiag;
GMatrix* pV;
pData->singularValueDecomposition(&pU, &pDiag, &pV, false, maxIters);
Holder<GMatrix> hU(pU);
ArrayHolder<double> hDiag(pDiag);
Holder<GMatrix> hV(pV);
pU->saveArff(ufilename.c_str());
pV->saveArff(vfilename.c_str());
if(sigmafilename.length() > 0)
{
GMatrix sigma(pU->rows(), pV->rows());
sigma.setAll(0.0);
size_t m = std::min(sigma.rows(), (size_t)sigma.cols());
for(size_t i = 0; i < m; i++)
sigma.row(i)[i] = pDiag[i];
sigma.saveArff(sigmafilename.c_str());
}
else
{
GVec::print(cout, 14, pDiag, std::min(pU->rows(), pV->rows()));
cout << "\n";
}
}
示例15: refine
void GLinearRegressor::refine(GMatrix& features, GMatrix& labels, double learningRate, size_t epochs, double learningRateDecayFactor)
{
size_t fDims = features.cols();
size_t lDims = labels.cols();
size_t* pIndexes = new size_t[features.rows()];
ArrayHolder<size_t> hIndexes(pIndexes);
GIndexVec::makeIndexVec(pIndexes, features.rows());
for(size_t i = 0; i < epochs; i++)
{
GIndexVec::shuffle(pIndexes, features.rows(), &m_rand);
size_t* pIndex = pIndexes;
for(size_t j = 0; j < features.rows(); j++)
{
double* pFeat = features[*pIndex];
double* pLab = labels[*pIndex];
double* pBias = m_pEpsilon;
for(size_t k = 0; k < lDims; k++)
{
double err = *pLab - (GVec::dotProduct(pFeat, m_pBeta->row(k), fDims) + *pBias);
double* pF = pFeat;
double lr = learningRate;
double mag = 0.0;
for(size_t l = 0; l < fDims; l++)
{
double d = *pF * err;
mag += (d * d);
pF++;
}
mag += err * err;
if(mag > 1.0)
lr /= mag;
pF = pFeat;
double* pW = m_pBeta->row(k);
for(size_t l = 0; l < fDims; l++)
{
*pW += *pF * lr * err;
pF++;
pW++;
}
*pBias += learningRate * err;
pLab++;
pBias++;
}
pIndex++;
}
learningRate *= learningRateDecayFactor;
}
}