knnsearch from Matlab to Julia



我正在尝试使用NearestNeighbors.jl包在Julia中运行最近邻居搜索。相应的Matlab代码为

X = rand(10);
Y = rand(100); 
Z = zeros(size(Y));
Z = knnsearch(X, Y); 

这生成了长度为100的向量Z,其中第i个元素是X的索引,对于所有i=1:100,X的元素最接近Y中的第i个单元。

真的需要一些帮助将上面最后一行的Matlab代码转换为Julia!

使用:

X = rand(1, 10)
Y = rand(1, 100)
nn(KDTree(X), Y)[1]

如果您想在将来重用中间KDTree对象,那么存储它将非常有用(因为它将提高查询的效率(。

现在我的例子的关键点是什么。最近邻居.jl接受以下输入数据:

它可以是:

  • 大小为nd×np的矩阵,具有要插入树中的点,其中nd是点的维数,np是点的数目
  • 具有固定维度的向量的向量,nd,它必须是类型的一部分

我使用了第一种方法。重点是观察结果必须在列中(而不是像原始代码中那样在行中(。请记住,在Julia中,向量是柱状的,因此最近邻居.jl将rand(10)视为具有10个维度的1个观测值,而rand(1, 10)视为每个具有1个维度的10个观测值。

然而,对于您的原始数据,因为您只想要一个最近的邻居,而且它是一维的,而且很小,所以足以写入(这里我假设XY是您存储在矢量中的原始数据(:

[argmin(abs(v - y) for v in X) for y in Y]

而不使用任何额外的封装。

NearestNeighbors.jl对于处理具有许多元素的高维数据非常有效。

最新更新