void CompactTriples::load(ModifiableTriples &triples, ProgressListener *listener) { triples.sort(order); IteratorTripleID *it = triples.searchAll(); vector<unsigned int> vectorY, vectorZ; unsigned int lastX, lastY, lastZ; unsigned int x, y, z; // First triple if(it->hasNext()) { TripleID *triple = it->next(); swapComponentOrder(triple, SPO, order); lastX = x = triple->getSubject(); lastY = y = triple->getPredicate(); lastZ = z = triple->getObject(); vectorY.push_back(y); vectorZ.push_back(z); numTriples++; } // Rest of the triples while(it->hasNext()) { TripleID *triple = it->next(); //cout << "111> " << triple << endl; swapComponentOrder(triple, SPO, order); //cout << "222> " << triple << endl; x = triple->getSubject(); y = triple->getPredicate(); z = triple->getObject(); if(x!=lastX) { vectorY.push_back(0); vectorY.push_back(y); vectorZ.push_back(0); vectorZ.push_back(z); } else if(y!=lastY) { vectorY.push_back(y); vectorZ.push_back(0); vectorZ.push_back(z); } else { vectorZ.push_back(z); } lastX = x; lastY = y; lastZ = z; NOTIFYCOND(listener, "Converting to CompactTriples.", numTriples, triples.getNumberOfElements()); numTriples++; } delete it; VectorUIntIterator itY(vectorY); VectorUIntIterator itZ(vectorZ); streamY->add(itY); streamZ->add(itZ); #if 0 // Debug Adjacency Lists cout << "Y" << vectorY.size() << "): "; for(unsigned int i=0;i<arrayY->getNumberOfElements();i++){ cout << arrayY->get(i) << " "; } cout << endl; cout << "Z" << vectorZ.size() << "): "; for(unsigned int i=0;i<arrayZ->getNumberOfElements();i++){ cout << arrayZ->get(i) << " "; } cout << endl; #endif }
ERMsg CKNearestNeighbor::LoadFromString(const string& dataX, const string& dataY) { ERMsg msg; vector<string> species = GetSpeciesList(dataX); if (species.empty()) { msg.ajoute("Invalid input file. Need to have one column named SpeciesID"); return msg; } std::stringstream streamX(dataX); std::stringstream streamY(dataY); CSVIterator itX(streamX); CSVIterator itY(streamY); CSVRow const& headerX = itX.Header(); CSVRow const& headerY = itY.Header(); set<size_t> Xset = headerX.FindAll("X_"); set<size_t> Yset = headerY.FindAll("Y_"); vector<size_t> Xpos(Xset.begin(), Xset.end()); vector<size_t> Ypos(Yset.begin(), Yset.end()); vector<size_t> coordinatePos; if (Xpos.empty()) { msg.ajoute("Invalid input file. Doesn't contain X value with prefix: X_"); return msg; } m_X.SetNbDimension(Xpos.size()*species.size()); for (size_t s = 0; s < species.size(); s++) for (size_t i = 0; i < Xpos.size(); i++) m_X.SetDimensionName(s*Xpos.size() + i, headerX[Xpos[i]] + "_" + species[s]); m_Y.resize(Ypos.size()); for (size_t i = 0; i < Ypos.size(); i++) m_Y[i].SetName(headerY[Ypos[i]]); for (int x = 0; itX != CSVIterator(); x++) { m_X.resize(m_X.size() + 1); m_X[x].SetNbDimension(Xpos.size()*species.size()); for (size_t s = 0; s < species.size(); s++, ++itX) { ASSERT(itX != CSVIterator()); CSVRow const& line = *itX; for (size_t i = 0; i < Xpos.size(); i++) { if (Xpos[i] < (int)line.size()) { if (line[Xpos[i]] != "NA") { m_X[x][s*Xpos.size() + i] = ToFloat(line[Xpos[i]]); } else { msg.ajoute("Reading error at line : " + ToString(i + 1)); msg.ajoute("Row with missing values (\"NA\") not allowed."); return msg; } } else { msg.ajoute("Reading error at line : " + ToString(i + 1)); msg.ajoute("Expected number of columns : " + ToString(Ypos.size())); msg.ajoute("Number of columns find : " + ToString(line.size())); return msg; } } } } //for(size_t i=0; i<Ypos.size(); i++) for (; itY != CSVIterator(); ++itY) { CSVRow const& line = *itY; for (size_t i = 0; i < Ypos.size(); i++) { if (Ypos[i] < (int)line.size()) { if (line[Ypos[i]] != "NA") { m_Y[i].push_back(ToFloat(line[Ypos[i]])); } else { msg.ajoute("Reading error at line : " + ToString(i + 1)); msg.ajoute("Row with missing values (\"NA\") not allowed."); return msg; } } else { msg.ajoute("Reading error at line : " + ToString(i + 1)); msg.ajoute("Expected number of columns : " + ToString(Ypos.size())); msg.ajoute("Number of columns find : " + ToString(line.size())); return msg; } } } return msg; }