Implement all nearest neighbor
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Lets say I want to find all neighbors. A function that will take in an excel file with data of different cars (caryear carmileage carhorsepower carlife) amd I want to be able to input data of a car I want and if it already exist according to my input then return that but if it does not return all the colosest/similar version of that car according to some all nearest neighbor implemantation. Not sure if that makes sense but I would appreciate some help :)
4 commentaires
Réponse acceptée
bransa
le 20 Mai 2022
Modifié(e) : bransa
le 20 Mai 2022
I would use logical indexing to query your excel data. When your return is empty, then prioritize the dimensions you want to search by and either use a combination of min-abs(difference) (one item searched) or knnsearch for a list of queries. Here is something to show what I am getting at. Not sure it runs bc I don't have sample data
found_index = find(carYear == inputYear & ...
carMileage == inputMileage & ...
carHorsepower == inputHorsepower & ...
carLife == inputLife);
if ~isempty(found_index)
fprintf('%s meets your input specifications.\n',carName)
else
% first try to find the year & horsepower ignoring the mileage and life
% just because this makes sense to me
found_index = find(carYear == inputYear & carHorsepower == inputHorsepower);
if ~isempty(found_index)
if length(found_index) == 1
fprintf('%s is the same year & horsepower.\n',carName)
else
fprintf('the following cars are the same year & horsepower:\n')
% now you have more than one car that meets 2 conditions.
% find the min difference for mileage and life
[~,minLifeIndex] = min(abs(carLife(found_index)-inputLife(found_index)));
[~,minMileageIndex] = min(abs(carMileage(found_index)-inputMileage(found_index)));
% note: your min~Index refers to the index of the
% array found_index. The index that meets the criteria in
% carMileage is carMileage(found_index(min~Index))
fprintf('\tclosest in life: %s\n',carName(found_index(minLifeIndex)))
fprintf('\tclosest in mileage: %s\n',carName(found_index(minMileageIndex)))
end
else
% some other less rigorous set of conditions
end
end
Plus de réponses (0)
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!