本文整理汇总了C++中arma::Mat::set_size方法的典型用法代码示例。如果您正苦于以下问题:C++ Mat::set_size方法的具体用法?C++ Mat::set_size怎么用?C++ Mat::set_size使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类arma::Mat
的用法示例。
在下文中一共展示了Mat::set_size方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Split
void Split(const arma::Mat<T>& input,
const arma::Row<U>& inputLabel,
arma::Mat<T>& trainData,
arma::Mat<T>& testData,
arma::Row<U>& trainLabel,
arma::Row<U>& testLabel,
const double testRatio)
{
const size_t testSize = static_cast<size_t>(input.n_cols * testRatio);
const size_t trainSize = input.n_cols - testSize;
trainData.set_size(input.n_rows, trainSize);
testData.set_size(input.n_rows, testSize);
trainLabel.set_size(trainSize);
testLabel.set_size(testSize);
const arma::Col<size_t> order =
arma::shuffle(arma::linspace<arma::Col<size_t>>(0, input.n_cols - 1,
input.n_cols));
for (size_t i = 0; i != trainSize; ++i)
{
trainData.col(i) = input.col(order[i]);
trainLabel(i) = inputLabel(order[i]);
}
for (size_t i = 0; i != testSize; ++i)
{
testData.col(i) = input.col(order[i + trainSize]);
testLabel(i) = inputLabel(order[i + trainSize]);
}
}
示例2: elementMapper
void ConcreteGridView<DuneGridView>::getRawElementDataImpl(
arma::Mat<CoordinateType>& vertices,
arma::Mat<int>& elementCorners,
arma::Mat<char>& auxData) const
{
typedef typename DuneGridView::Grid DuneGrid;
typedef typename DuneGridView::IndexSet DuneIndexSet;
const int dimGrid = DuneGrid::dimension;
const int dimWorld = DuneGrid::dimensionworld;
const int codimVertex = dimGrid;
const int codimElement = 0;
typedef Dune::LeafMultipleCodimMultipleGeomTypeMapper<DuneGrid,
Dune::MCMGElementLayout> DuneElementMapper;
typedef typename DuneGridView::template Codim<codimVertex>::Iterator
DuneVertexIterator;
typedef typename DuneGridView::template Codim<codimElement>::Iterator
DuneElementIterator;
typedef typename DuneGridView::template Codim<codimVertex>::Geometry
DuneVertexGeometry;
typedef typename DuneGridView::template Codim<codimElement>::Geometry
DuneElementGeometry;
typedef typename DuneGrid::ctype ctype;
const DuneIndexSet& indexSet = m_dune_gv.indexSet();
vertices.set_size(dimWorld, indexSet.size(codimVertex));
for (DuneVertexIterator it = m_dune_gv.template begin<codimVertex>();
it != m_dune_gv.template end<codimVertex>(); ++it)
{
size_t index = indexSet.index(*it);
const DuneVertexGeometry& geom = it->geometry();
Dune::FieldVector<ctype, dimWorld> vertex = geom.corner(0);
for (int i = 0; i < dimWorld; ++i)
vertices(i, index) = vertex[i];
}
const int MAX_CORNER_COUNT = dimWorld == 2 ? 2 : 4;
DuneElementMapper elementMapper(m_dune_gv.grid());
elementCorners.set_size(MAX_CORNER_COUNT, elementMapper.size());
for (DuneElementIterator it = m_dune_gv.template begin<codimElement>();
it != m_dune_gv.template end<codimElement>(); ++it)
{
size_t index = elementMapper.map(*it);
const Dune::GenericReferenceElement<ctype, dimGrid>& refElement =
Dune::GenericReferenceElements<ctype, dimGrid>::general(it->type());
const int cornerCount = refElement.size(codimVertex);
assert(cornerCount <= MAX_CORNER_COUNT);
for (int i = 0; i < cornerCount; ++i)
elementCorners(i, index) = indexSet.subIndex(*it, i, codimVertex);
for (int i = cornerCount; i < MAX_CORNER_COUNT; ++i)
elementCorners(i, index) = -1;
}
auxData.set_size(0, elementCorners.n_cols);
}
示例3: setMinimalActiveJointActuations
inline ParallelKinematicMachine3PUPS::ParallelKinematicMachine3PUPS() noexcept {
setMinimalActiveJointActuations({0.39, 0.39, 0.39});
setMaximalActiveJointActuations({0.95, 0.95, 0.95});
setEndEffectorJointPositions({
-0.025561381023353, 0.086293776138137, 0.12,
0.087513292835791, -0.021010082747031, 0.12,
-0.061951911812438, -0.065283693391106, 0.12});
setRedundantJointStartPositions({
-0.463708870031622, 0.417029254828353, -0.346410161513775,
0.593012363818459, 0.193069033993384, -0.346410161513775,
-0.129303493786837, -0.610098288821738, -0.346410161513775});
setRedundantJointEndPositions({
-0.247202519085512, 0.292029254828353, 0.086602540378444,
0.376506012872349, 0.068069033993384, 0.086602540378444,
-0.129303493786837, -0.360098288821738, 0.086602540378444});
redundantJointStartToEndPositions_ = redundantJointEndPositions_ - redundantJointStartPositions_;
redundantJointIndicies_ = arma::find(arma::any(redundantJointStartToEndPositions_));
redundantJointAngles_.set_size(3, redundantJointIndicies_.n_elem);
for (std::size_t n = 0; n < redundantJointIndicies_.n_elem; ++n) {
const double& redundantJointXAngle = std::atan2(redundantJointStartToEndPositions_(1, n), redundantJointStartToEndPositions_(0, n));
const double& redundantJointYAngle = std::atan2(redundantJointStartToEndPositions_(2, n), redundantJointStartToEndPositions_(1, n));
redundantJointAngles_.col(n) = arma::Col<double>::fixed<3>({std::cos(redundantJointXAngle) * std::cos(redundantJointYAngle), std::sin(redundantJointXAngle) * std::cos(redundantJointYAngle), std::sin(redundantJointYAngle)});
}
}
示例4: loadSeries
void MainWindow::loadSeries() {
QString seriesFile = __fileManager.openFile(0, this, "Open Series File...", "*.mat");
if (seriesFile != "") {
cout << "Loading start ..." << flush;
_data.load(seriesFile.toStdString().c_str());
cout << " done. " << endl;
_dataT = arma::trans(_data);
cout << _data.n_cols << "," << _data.n_rows << endl;
_imageBuffer.set_size(_mapid.n_rows, _mapid.n_cols);
for (int i = 0; i < _mapid.n_rows; i++) {
for (int j = 0; j < _mapid.n_cols; j++) {
if (_mapid(i,j) != _mapid(i,j)) {
_imageBuffer(i,j) = NAN;
} else {
_imageBuffer(i,j) = 0;
}
}
}
ui.slider->setMaximum(_data.n_cols - 1);
ui.minValue->setValue(_data.min());
ui.maxValue->setValue(_data.max());
_mapItem->setImage(_imageBuffer.memptr(), _imageBuffer.n_rows, _imageBuffer.n_cols);
_mapItem->setRange(ui.minValue->value(), ui.maxValue->value());
_mapItem->setInteraction(this);
selectValue(0);
}
}
示例5: invalid_argument
void FastMKS<KernelType, TreeType>::Search(TreeType* queryTree,
const size_t k,
arma::Mat<size_t>& indices,
arma::mat& kernels)
{
// If either naive mode or single mode is specified, this must fail.
if (naive || singleMode)
{
throw std::invalid_argument("can't call Search() with a query tree when "
"single mode or naive search is enabled");
}
// No remapping will be necessary because we are using the cover tree.
indices.set_size(k, queryTree->Dataset().n_cols);
kernels.set_size(k, queryTree->Dataset().n_cols);
kernels.fill(-DBL_MAX);
Timer::Start("computing_products");
typedef FastMKSRules<KernelType, TreeType> RuleType;
RuleType rules(referenceSet, queryTree->Dataset(), indices, kernels,
metric.Kernel());
typename TreeType::template DualTreeTraverser<RuleType> traverser(rules);
traverser.Traverse(*queryTree, *referenceTree);
Log::Info << rules.BaseCases() << " base cases." << std::endl;
Log::Info << rules.Scores() << " scores." << std::endl;
Timer::Stop("computing_products");
}
示例6: normals
void SpaceHelper<BasisFunctionType>::
getNormalsAtGlobalDofInterpolationPoints_defaultImplementation(
const Space<BasisFunctionType> &space,
arma::Mat<CoordinateType> &normals) {
std::vector<Point3D<CoordinateType>> vNormals;
space.getGlobalDofNormals(vNormals);
const size_t pointCount = vNormals.size();
const size_t worldDim = space.worldDimension();
normals.set_size(worldDim, pointCount);
for (size_t p = 0; p < pointCount; ++p) {
normals(0, p) = acc(vNormals, p).x;
if (worldDim > 1)
normals(1, p) = acc(vNormals, p).y;
if (worldDim > 2)
normals(2, p) = acc(vNormals, p).z;
}
}
示例7: ReturnIndicesFromTable
void LSHSearch<SortPolicy>::
Search(const size_t k,
arma::Mat<size_t>& resultingNeighbors,
arma::mat& distances,
const size_t numTablesToSearch)
{
// Set the size of the neighbor and distance matrices.
resultingNeighbors.set_size(k, querySet.n_cols);
distances.set_size(k, querySet.n_cols);
distances.fill(SortPolicy::WorstDistance());
resultingNeighbors.fill(referenceSet.n_cols);
size_t avgIndicesReturned = 0;
Timer::Start("computing_neighbors");
// Go through every query point sequentially.
for (size_t i = 0; i < querySet.n_cols; i++)
{
// Hash every query into every hash table and eventually into the
// 'secondHashTable' to obtain the neighbor candidates.
arma::uvec refIndices;
ReturnIndicesFromTable(i, refIndices, numTablesToSearch);
// An informative book-keeping for the number of neighbor candidates
// returned on average.
avgIndicesReturned += refIndices.n_elem;
// Sequentially go through all the candidates and save the best 'k'
// candidates.
for (size_t j = 0; j < refIndices.n_elem; j++)
BaseCase(distances, resultingNeighbors, i, (size_t) refIndices[j]);
}
Timer::Stop("computing_neighbors");
distanceEvaluations += avgIndicesReturned;
avgIndicesReturned /= querySet.n_cols;
Log::Info << avgIndicesReturned << " distinct indices returned on average." <<
std::endl;
}
示例8: evaluate
virtual void evaluate(const GeometricalData<CoordinateType>& geomData,
arma::Mat<ValueType>& result) const {
const arma::Mat<CoordinateType>& points = geomData.globals;
const arma::Mat<CoordinateType>& normals = geomData.normals;
#ifndef NDEBUG
if ((int)points.n_rows != worldDimension() ||
(int)points.n_rows != worldDimension())
throw std::invalid_argument(
"SurfaceNormalAndDomainIndexDependentFunction::evaluate(): "
"incompatible world dimension");
#endif
const size_t pointCount = points.n_cols;
result.set_size(codomainDimension(), pointCount);
for (size_t i = 0; i < pointCount; ++i) {
arma::Col<ValueType> activeResultColumn = result.unsafe_col(i);
m_functor.evaluate(points.unsafe_col(i), normals.unsafe_col(i),
geomData.domainIndex, activeResultColumn);
}
}
示例9: elementSizeSquared
void DefaultLocalAssemblerForOperatorsOnSurfacesUtilities<BasisFunctionType>::
precalculateElementSizesAndCentersForSingleGrid(
const RawGridGeometry<CoordinateType> &rawGeometry,
std::vector<CoordinateType> &elementSizesSquared,
arma::Mat<CoordinateType> &elementCenters,
CoordinateType &averageElementSize) {
const size_t elementCount = rawGeometry.elementCount();
const int worldDim = rawGeometry.worldDimension();
averageElementSize = 0.; // We will store here temporarily
// the sum of element sizes
elementSizesSquared.resize(elementCount);
for (int e = 0; e < elementCount; ++e) {
elementSizesSquared[e] = elementSizeSquared(e, rawGeometry);
averageElementSize += sqrt(elementSizesSquared[e]);
}
averageElementSize /= elementCount;
elementCenters.set_size(worldDim, elementCount);
for (int e = 0; e < elementCount; ++e)
elementCenters.col(e) = elementCenter(e, rawGeometry);
}
开发者ID:getzze,项目名称:bempp,代码行数:22,代码来源:default_local_assembler_for_operators_on_surfaces_utilities.cpp
示例10: scheduler
void DefaultEvaluatorForIntegralOperators<BasisFunctionType, KernelType,
ResultType, GeometryFactory>::evaluate(
Region region,
const arma::Mat<CoordinateType>& points, arma::Mat<ResultType>& result) const
{
const size_t pointCount = points.n_cols;
const int outputComponentCount = m_integral->resultDimension();
result.set_size(outputComponentCount, pointCount);
result.fill(0.);
const GeometricalData<CoordinateType>& trialGeomData =
(region == EvaluatorForIntegralOperators<ResultType>::NEAR_FIELD) ?
m_nearFieldTrialGeomData :
m_farFieldTrialGeomData;
const CollectionOf2dArrays<ResultType>& trialTransfValues =
(region == EvaluatorForIntegralOperators<ResultType>::NEAR_FIELD) ?
m_nearFieldTrialTransfValues :
m_farFieldTrialTransfValues;
const std::vector<CoordinateType>& weights =
(region == EvaluatorForIntegralOperators<ResultType>::NEAR_FIELD) ?
m_nearFieldWeights :
m_farFieldWeights;
// Do things in chunks of 96 points -- in order to avoid creating
// too large arrays of kernel values
const size_t chunkSize = 96;
const size_t chunkCount = (pointCount + chunkSize - 1) / chunkSize;
int maxThreadCount = 1;
if (!m_parallelizationOptions.isOpenClEnabled()) {
if (m_parallelizationOptions.maxThreadCount() ==
ParallelizationOptions::AUTO)
maxThreadCount = tbb::task_scheduler_init::automatic;
else
maxThreadCount = m_parallelizationOptions.maxThreadCount();
}
tbb::task_scheduler_init scheduler(maxThreadCount);
typedef EvaluationLoopBody<
BasisFunctionType, KernelType, ResultType> Body;
{
Fiber::SerialBlasRegion region;
tbb::parallel_for(tbb::blocked_range<size_t>(0, chunkCount),
Body(chunkSize,
points, trialGeomData, trialTransfValues, weights,
*m_kernels, *m_integral, result));
}
// // Old serial version
// CollectionOf4dArrays<KernelType> kernelValues;
// GeometricalData<CoordinateType> evalPointGeomData;
// for (size_t start = 0; start < pointCount; start += chunkSize)
// {
// size_t end = std::min(start + chunkSize, pointCount);
// evalPointGeomData.globals = points.cols(start, end - 1 /* inclusive */);
// m_kernels->evaluateOnGrid(evalPointGeomData, trialGeomData, kernelValues);
// // View into the current chunk of the "result" array
// _2dArray<ResultType> resultChunk(outputComponentCount, end - start,
// result.colptr(start));
// m_integral->evaluate(trialGeomData,
// kernelValues,
// weightedTrialTransfValues,
// resultChunk);
// }
}
示例11: if
void RAModel<SortPolicy>::Search(arma::mat&& querySet,
const size_t k,
arma::Mat<size_t>& neighbors,
arma::mat& distances)
{
// Apply the random basis if necessary.
if (randomBasis)
querySet = q * querySet;
Log::Info << "Searching for " << k << " approximate nearest neighbors with ";
if (!Naive() && !SingleMode())
Log::Info << "dual-tree rank-approximate " << TreeName() << " search...";
else if (!Naive())
Log::Info << "single-tree rank-approximate " << TreeName() << " search...";
else
Log::Info << "brute-force (naive) rank-approximate search...";
Log::Info << std::endl;
switch (treeType)
{
case KD_TREE:
if (!kdTreeRA->Naive() && !kdTreeRA->SingleMode())
{
// Build a second tree and search.
Timer::Start("tree_building");
Log::Info << "Building query tree..." << std::endl;
std::vector<size_t> oldFromNewQueries;
typename RAType<tree::KDTree>::Tree queryTree(std::move(querySet),
oldFromNewQueries, leafSize);
Log::Info << "Tree built." << std::endl;
Timer::Stop("tree_building");
arma::Mat<size_t> neighborsOut;
arma::mat distancesOut;
kdTreeRA->Search(&queryTree, k, neighborsOut, distancesOut);
// Unmap the query points.
distances.set_size(distancesOut.n_rows, distancesOut.n_cols);
neighbors.set_size(neighborsOut.n_rows, neighborsOut.n_cols);
for (size_t i = 0; i < neighborsOut.n_cols; ++i)
{
neighbors.col(oldFromNewQueries[i]) = neighborsOut.col(i);
distances.col(oldFromNewQueries[i]) = distancesOut.col(i);
}
}
else
{
// Search without building a second tree.
kdTreeRA->Search(querySet, k, neighbors, distances);
}
break;
case COVER_TREE:
// No mapping necessary.
coverTreeRA->Search(querySet, k, neighbors, distances);
break;
case R_TREE:
// No mapping necessary.
rTreeRA->Search(querySet, k, neighbors, distances);
break;
case R_STAR_TREE:
// No mapping necessary.
rStarTreeRA->Search(querySet, k, neighbors, distances);
break;
case X_TREE:
// No mapping necessary.
xTreeRA->Search(querySet, k, neighbors, distances);
break;
}
}
示例12: query
void CF<FactorizerType>::GetRecommendations(const size_t numRecs,
arma::Mat<size_t>& recommendations,
arma::Col<size_t>& users)
{
// Generate new table by multiplying approximate values.
rating = w * h;
// Now, we will use the decomposed w and h matrices to estimate what the user
// would have rated items as, and then pick the best items.
// Temporarily store feature vector of queried users.
arma::mat query(rating.n_rows, users.n_elem);
// Select feature vectors of queried users.
for (size_t i = 0; i < users.n_elem; i++)
query.col(i) = rating.col(users(i));
// Temporary storage for neighborhood of the queried users.
arma::Mat<size_t> neighborhood;
// Calculate the neighborhood of the queried users.
// This should be a templatized option.
neighbor::AllkNN a(rating);
arma::mat resultingDistances; // Temporary storage.
a.Search(query, numUsersForSimilarity, neighborhood, resultingDistances);
// Temporary storage for storing the average rating for each user in their
// neighborhood.
arma::mat averages = arma::zeros<arma::mat>(rating.n_rows, query.n_cols);
// Iterate over each query user.
for (size_t i = 0; i < neighborhood.n_cols; ++i)
{
// Iterate over each neighbor of the query user.
for (size_t j = 0; j < neighborhood.n_rows; ++j)
averages.col(i) += rating.col(neighborhood(j, i));
// Normalize average.
averages.col(i) /= neighborhood.n_rows;
}
// Generate recommendations for each query user by finding the maximum numRecs
// elements in the averages matrix.
recommendations.set_size(numRecs, users.n_elem);
recommendations.fill(cleanedData.n_rows); // Invalid item number.
arma::mat values(numRecs, users.n_elem);
values.fill(-DBL_MAX); // The smallest possible value.
for (size_t i = 0; i < users.n_elem; i++)
{
// Look through the averages column corresponding to the current user.
for (size_t j = 0; j < averages.n_rows; ++j)
{
// Ensure that the user hasn't already rated the item.
if (cleanedData(j, users(i)) != 0.0)
continue; // The user already rated the item.
// Is the estimated value better than the worst candidate?
const double value = averages(j, i);
if (value > values(values.n_rows - 1, i))
{
// It should be inserted. Which position?
size_t insertPosition = values.n_rows - 1;
while (insertPosition > 0)
{
if (value <= values(insertPosition - 1, i))
break; // The current value is the right one.
insertPosition--;
}
// Now insert it into the list.
InsertNeighbor(i, insertPosition, j, value, recommendations,
values);
}
}
// If we were not able to come up with enough recommendations, issue a
// warning.
if (recommendations(values.n_rows - 1, i) == cleanedData.n_rows + 1)
Log::Warn << "Could not provide " << values.n_rows << " recommendations "
<< "for user " << users(i) << " (not enough un-rated items)!"
<< std::endl;
}
}
示例13: LoadARFF
//.........这里部分代码省略.........
else if (info.Dimensionality() != dimensionality)
{
std::ostringstream oss;
oss << "data::LoadARFF(): given DatasetInfo has dimensionality "
<< info.Dimensionality() << ", but data has dimensionality "
<< dimensionality;
throw std::invalid_argument(oss.str());
}
for (size_t i = 0; i < types.size(); ++i)
{
if (types[i])
info.Type(i) = Datatype::categorical;
else
info.Type(i) = Datatype::numeric;
}
// We need to find out how many lines of data are in the file.
std::streampos pos = ifs.tellg();
size_t row = 0;
while (ifs.good())
{
std::getline(ifs, line, '\n');
++row;
}
// Uncount the EOF row.
--row;
// Since we've hit the EOF, we have to call clear() so we can seek again.
ifs.clear();
ifs.seekg(pos);
// Now, set the size of the matrix.
matrix.set_size(dimensionality, row);
// Now we are looking at the @data section.
row = 0;
while (ifs.good())
{
std::getline(ifs, line, '\n');
boost::trim(line);
// Each line of the @data section must be a CSV (except sparse data, which
// we will handle later). So now we can tokenize the
// CSV and parse it. The '?' representing a missing value is not allowed,
// so if that occurs we throw an exception. We also throw an exception if
// any piece of data does not match its type (categorical or numeric).
// If the first character is {, it is sparse data, and we can just say this
// is not handled for now...
if (line[0] == '{')
throw std::runtime_error("cannot yet parse sparse ARFF data");
// Tokenize the line.
typedef boost::tokenizer<boost::escaped_list_separator<char>> Tokenizer;
boost::escaped_list_separator<char> sep("\\", ",", "\"");
Tokenizer tok(line, sep);
size_t col = 0;
std::stringstream token;
for (Tokenizer::iterator it = tok.begin(); it != tok.end(); ++it)
{
// Check that we are not too many columns in.
if (col >= matrix.n_rows)
{
std::stringstream error;
error << "Too many columns in line " << (headerLines + row) << ".";
示例14: GetRecommendations
void CF::GetRecommendations(const size_t numRecs,
arma::Mat<size_t>& recommendations,
arma::Col<size_t>& users)
{
// We want to avoid calculating the full rating matrix, so we will do nearest
// neighbor search only on the H matrix, using the observation that if the
// rating matrix X = W*H, then d(X.col(i), X.col(j)) = d(W H.col(i), W
// H.col(j)). This can be seen as nearest neighbor search on the H matrix
// with the Mahalanobis distance where M^{-1} = W^T W. So, we'll decompose
// M^{-1} = L L^T (the Cholesky decomposition), and then multiply H by L^T.
// Then we can perform nearest neighbor search.
arma::mat l = arma::chol(w.t() * w);
arma::mat stretchedH = l * h; // Due to the Armadillo API, l is L^T.
// Now, we will use the decomposed w and h matrices to estimate what the user
// would have rated items as, and then pick the best items.
// Temporarily store feature vector of queried users.
arma::mat query(stretchedH.n_rows, users.n_elem);
// Select feature vectors of queried users.
for (size_t i = 0; i < users.n_elem; i++)
query.col(i) = stretchedH.col(users(i));
// Temporary storage for neighborhood of the queried users.
arma::Mat<size_t> neighborhood;
// Calculate the neighborhood of the queried users.
// This should be a templatized option.
neighbor::KNN a(stretchedH);
arma::mat resultingDistances; // Temporary storage.
a.Search(query, numUsersForSimilarity, neighborhood, resultingDistances);
// Generate recommendations for each query user by finding the maximum numRecs
// elements in the averages matrix.
recommendations.set_size(numRecs, users.n_elem);
recommendations.fill(cleanedData.n_rows); // Invalid item number.
arma::mat values(numRecs, users.n_elem);
values.fill(-DBL_MAX); // The smallest possible value.
for (size_t i = 0; i < users.n_elem; i++)
{
// First, calculate average of neighborhood values.
arma::vec averages;
averages.zeros(cleanedData.n_rows);
for (size_t j = 0; j < neighborhood.n_rows; ++j)
averages += w * h.col(neighborhood(j, i));
averages /= neighborhood.n_rows;
// Look through the averages column corresponding to the current user.
for (size_t j = 0; j < averages.n_rows; ++j)
{
// Ensure that the user hasn't already rated the item.
if (cleanedData(j, users(i)) != 0.0)
continue; // The user already rated the item.
// Is the estimated value better than the worst candidate?
const double value = averages[j];
if (value > values(values.n_rows - 1, i))
{
// It should be inserted. Which position?
size_t insertPosition = values.n_rows - 1;
while (insertPosition > 0)
{
if (value <= values(insertPosition - 1, i))
break; // The current value is the right one.
insertPosition--;
}
// Now insert it into the list.
InsertNeighbor(i, insertPosition, j, value, recommendations,
values);
}
}
// If we were not able to come up with enough recommendations, issue a
// warning.
if (recommendations(values.n_rows - 1, i) == cleanedData.n_rows + 1)
Log::Warn << "Could not provide " << values.n_rows << " recommendations "
<< "for user " << users(i) << " (not enough un-rated items)!"
<< std::endl;
}
}
示例15: Load
bool Load(const std::string& filename,
arma::Mat<eT>& matrix,
DatasetInfo& info,
const bool fatal,
const bool transpose)
{
// Get the extension and load as necessary.
Timer::Start("loading_data");
// Get the extension.
std::string extension = Extension(filename);
// Catch nonexistent files by opening the stream ourselves.
std::fstream stream;
stream.open(filename.c_str(), std::fstream::in);
if (!stream.is_open())
{
Timer::Stop("loading_data");
if (fatal)
Log::Fatal << "Cannot open file '" << filename << "'. " << std::endl;
else
Log::Warn << "Cannot open file '" << filename << "'; load failed."
<< std::endl;
return false;
}
if (extension == "csv" || extension == "tsv" || extension == "txt")
{
// True if we're looking for commas; if false, we're looking for spaces.
bool commas = (extension == "csv");
std::string type;
if (extension == "csv")
type = "CSV data";
else
type = "raw ASCII-formatted data";
Log::Info << "Loading '" << filename << "' as " << type << ". "
<< std::flush;
std::string separators;
if (commas)
separators = ",";
else
separators = " \t";
// We'll load this as CSV (or CSV with spaces or tabs) according to
// RFC4180. So the first thing to do is determine the size of the matrix.
std::string buffer;
size_t cols = 0;
std::getline(stream, buffer, '\n');
// Count commas and whitespace in the line, ignoring anything inside
// quotes.
typedef boost::tokenizer<boost::escaped_list_separator<char>> Tokenizer;
boost::escaped_list_separator<char> sep("\\", separators, "\"");
Tokenizer tok(buffer, sep);
for (Tokenizer::iterator i = tok.begin(); i != tok.end(); ++i)
++cols;
// Now count the number of lines in the file. We've already counted the
// first one.
size_t rows = 1;
while (!stream.eof() && !stream.bad() && !stream.fail())
{
std::getline(stream, buffer, '\n');
if (!stream.fail())
++rows;
}
// Now we have the size. So resize our matrix.
if (transpose)
{
matrix.set_size(cols, rows);
info = DatasetInfo(cols);
}
else
{
matrix.set_size(rows, cols);
info = DatasetInfo(rows);
}
stream.close();
stream.open(filename, std::fstream::in);
// Extract line by line.
std::stringstream token;
size_t row = 0;
while (!stream.bad() && !stream.fail() && !stream.eof())
{
std::getline(stream, buffer, '\n');
// Look at each token. Unfortunately we have to do this character by
// character, because things may be escaped in quotes.
Tokenizer lineTok(buffer, sep);
size_t col = 0;
for (Tokenizer::iterator it = lineTok.begin(); it != lineTok.end(); ++it)
{
// Attempt to extract as type eT. If that fails, we'll assume it's a
//.........这里部分代码省略.........