Skip to content

Instantly share code, notes, and snippets.

@emjotde
Last active June 2, 2020 21:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emjotde/22eee6e4d5c8a2d15eba67cbbe6df1de to your computer and use it in GitHub Desktop.
Save emjotde/22eee6e4d5c8a2d15eba67cbbe6df1de to your computer and use it in GitHub Desktop.
auto objFromIds = [](similarity::IdType id, const std::vector<similarity::IdType>& input) {
return new similarity::Object(id, -1, input.size() * sizeof(similarity::IdType), &input[0]);
};
similarity::initLibrary(0, LogChoice::LIB_LOGSTDERR, 0);
std::unique_ptr<similarity::Space<float>> space(new similarity::SpaceSparseJaccard<float>());
similarity::ObjectVector data; // doesn't free anything, just a vector of Object*
data.push_back(objFromIds(0, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9})); // delete me
data.push_back(objFromIds(1, {2, 3, 4, 5, 6, 7})); // delete me
auto factory = similarity::MethodFactoryRegistry<float>::Instance();
std::unique_ptr<similarity::Index<float>> nmsIndex(factory.CreateMethod(true, "brute_force", "jaccard_sparse", *space, data));
similarity::AnyParams params; // empty params
nmsIndex->CreateIndex(params);
UPtr<similarity::Object> q(objFromIds(-1, {0, 2, 3, 6, 7, 10})); // managed memory
similarity::KNNQuery<float> knn(*space, q.get(), 2);
nmsIndex->Search(&knn, -1);
UPtr<similarity::KNNQueue<float>> queue(knn.Result()->Clone());
while(queue->Size() > 0) {
auto dist = queue->TopDistance();
auto did = queue->TopObject()->id();
std::cerr << dist << " " << did << std::endl;
queue->Pop();
}
// can this somehow be done with managed memory?
for(auto obj : data)
delete obj;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment