我正在嘗試使用 NearestNeighbors.jl 包在 Julia 中運行最近鄰搜索。對應的Matlab代碼是
X = rand(10);
Y = rand(100);
Z = zeros(size(Y));
Z = knnsearch(X, Y);
這將生成 Z,一個長度為 100 的向量,其中第 i 個元素是 X 的索引,其元素最接近 Y 中的第 i 個元素,對于所有 i=1:100。
真的可以使用一些幫助將上面的 Matlab 代碼的最后一行轉換為 Julia!謝謝!
uj5u.com熱心網友回復:
采用:
X = rand(1, 10)
Y = rand(1, 100)
nn(KDTree(X), Y)[1]
KDTree如果您想在將來重用它(因為它將提高查詢效率),存盤中間物件將很有用。
現在我的例子的關鍵點是什么。NearestNeighbors.jl 接受以下輸入資料:
它可以是:
- 一個大小為 nd × np 的矩陣,其中包含要插入樹中的點,其中 nd 是點的維數,np 是點的數量
- 具有固定維數 nd 的向量的向量,它必須是型別的一部分。
我使用了第一種方法。關鍵是觀察必須在列中(而不是在原始代碼中的行中)。請記住,在 Julia 中,向量是柱狀的,因此rand(10)NearestNeighbors.jl 將其視為具有 10 個維度的 1 個觀測值,而rand(1, 10)將其視為具有 1 個維度的 10 個觀測值。
但是,對于您的原始資料,因為您只想要一個最近的鄰居并且它是一維的并且很小,因此足以撰寫(這里我假設X并且Y是您存盤在向量中的原始資料):
[argmin(abs(v - y) for v in X) for y in Y]
不使用任何額外的軟體包。
NearestNeighbors.jl 對于處理具有非常多元素的高維資料非常有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/437742.html
上一篇:根據計數改變線圖的粗細
