簡體   English   中英

在分散的數據中查找最近的點

[英]Finding nearest points in a scattered data

我正在努力提高我使用 gridfit 插值的大型數據集的插值速度。 我已經在stackoverflow上發布了一個問題,但沒有得到回復

所以,我正在考慮嘗試一些替代的東西。 我的想法是,如果我有一個龐大的數據集,如下面的 Python 代碼片段所示

arr_len = 932826
xi = np.random.uniform(low=0, high=4496, size=arr_len)
yi = np.random.uniform(low=-74, high=492, size=arr_len)
zi = np.random.uniform(low=-30, high=97, size=arr_len)

我必須插值並獲取定義點的值,例如(x,y)。 從分散數據 xi、yi 和 zi 中找到 4 個相鄰點的最快方法是什么,以便可以使用 interp2d 執行雙線性插值(見下圖)。 我不知道這是否會比使用 gridata 給我更快的結果,但我會很高興嘗試一下

在此處輸入圖像描述

我認為您所想到的本質上是最近鄰回歸 這是使用 scikit-learn 執行此操作的方法。 請注意,考慮的鄰居數 4 是任意選擇,因此您也可以嘗試其他值。

import numpy as np
from sklearn.neighbors import KNeighborsRegressor

arr_len = 932826
np.random.seed(42)
xi = np.random.uniform(low=0, high=4496, size=arr_len)
yi = np.random.uniform(low=-74, high=492, size=arr_len)
zi = np.random.uniform(low=-30, high=97, size=arr_len)

# points to get z-values for (e.g.):
x_new = [100, 500, 2000]
y_new = [400, 300, 100]

# in machine learning notation:
X_train = np.vstack([xi, yi]).T
y_train = zi
X_predict = np.vstack([x_new, y_new]).T

# fit 4-nearest neighbors regressor to the training data
neigh = KNeighborsRegressor(n_neighbors=4)
neigh.fit(X_train, y_train)

# get "interpolated" z-values
print(neigh.predict(X_predict))
[39.37712018  4.36600728 47.00192216]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM