<分区>
我有一堆(或多或少 3500 个)具有 4096 个分量的向量,我需要一个快速的方法来查看,给定另一个具有相同长度的向量的输入,这是最近的 N。 我想使用一些 matlab 函数来做到这一点。这可以满足我的需要吗?
https://uk.mathworks.com/help/stats/classificationknn-class.html
<分区>
我有一堆(或多或少 3500 个)具有 4096 个分量的向量,我需要一个快速的方法来查看,给定另一个具有相同长度的向量的输入,这是最近的 N。 我想使用一些 matlab 函数来做到这一点。这可以满足我的需要吗?
https://uk.mathworks.com/help/stats/classificationknn-class.html
最佳答案
您建议的是聚类函数,它应该从所有向量中生成 N 个聚类。不确定这是你想要的。如果你只是想在一堆向量之间有 N 个最小距离,你可以很容易地手动完成。像这样的东西:
distances = matrixOfvectors - yourVector; % repmat(your...) if you have older Matlab.
[val, pos] = sort(sum(distances.^2, 2)); % Sum might need 1 instead of 2, depends whether vectors are rows or columns.
minVectors = pos(1:N); % Take indices of N nearest to get which vectors are the closest.
如果 N 很小,比如 3 或更少,则避免排序会稍微快一些,只需先将每个新向量与第二大向量进行比较,然后根据结果与第一或第三向量进行比较。
关于algorithm - 搜索最近的 k 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44516061/