gpt4 book ai didi

matlab - knnsearch 从 Matlab 到 Julia

转载 作者:行者123 更新时间:2023-12-05 03:27:52 26 4
gpt4 key购买 nike

我正在尝试使用 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,其元素最接近 Y 中的第 i 个元素。

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

最佳答案

使用:

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

如果您想在将来重用它,存储中间 KDTree 对象会很有用(因为它会提高查询效率)。

现在我的示例的关键点是什么。 NearestNeighbors.jl 接受以下输入数据:

It can either be:

  • a matrix of size nd × np with the points to insert in the tree where nd is the dimensionality of the points and np is the number of points
  • a vector of vectors with fixed dimensionality, nd, which must be part of the type.

我用的是第一种方法。关键是观察必须在列中(而不是在原始代码中的行中)。请记住,在 Julia 中向量是柱状的,因此 rand(10) 被 NearestNeighbors.jl 视为具有 10 个维度的 1 个观察值,而 rand(1, 10) 是被认为是 10 个观察值,每个观察值有 1 个维度。

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

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

不使用任何额外的包。

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

关于matlab - knnsearch 从 Matlab 到 Julia,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71346327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com