matlab的mink函數

mink函數

近期由於地統計的課程要編寫克里格插值方法,會涉及到對一個座標點求其鄰域範圍內最近的4個點,如何在matlab裏較爲快速的方式來找到最近的點呢

1. 輸入

輸入是各個點的座標值

2. 輸出

輸出爲離目標座標點最近的四個點的序號(索引)

3. mink函數用法

B = mink(A,k) 返回 A 的 k 個最小元素。
如果 A 是向量,則 mink 返回一個向量,其中包含 A 的 k 個最小元素。
如果 A 是矩陣,則 mink 返回一個矩陣,該矩陣的列包含 A 的每一列中的 k 個最小元素。
如果 A 是多維數組,則 mink 返回大小不等於 1 的第一個維度上的 k 個最小元素。
運算維度,指定爲正整數標量。默認情況下,mink 沿其大小不爲 1 的第一個維度進行運算。
例如,如果 A 是矩陣,則 mink(A,k,1) 沿 A 的行進行運算,計算每一列的最小值
mink(A,k,2) 沿 A 的列進行運算,計算每一行的最小值。
[B,I] = mink(A,k) 計算 A 的 k 個最小值的索引,並在 I 中返回這些索引。

代碼實例

data=[652753.64762600000	3401386.13520000000
651398.23551100000	3401243.71019000000
650757.32551100000	3397599.36602000000
650383.78438800000	3397655.75152000000
648218.09904800000	3400244.31901000000
649289.90303600000	3399735.42808000000
648800.23382300000	3396647.88481000000
647428.12291900000	3395735.58427000000
647470.40602700000	3398478.01034000000
648293.25574800000	3394792.44465000000
];
xy=[6.0087e+05,3.3647e+06];
%計算樣點離xy距離平方
num_neighbor=4;%鄰近點數
D2=(data(:,1)-xy(1)).^2+(data(:,2)-xy(2)).^2;
[D,tag]=mink(D2,num_neighbor);%tag表示最近的4個點D表示對應的距離平方
Dc_neighbor=sqrt(D);
tag_neighbor=tag;%最近的4個點的索引

總結

如果原始點數較多,那麼此方法是比較快能夠搜索到最近的k個點的方法,如果對計算距離後的距離列向量進行排序sort函數操作再來取前四個對應得索引,無疑會增加時間複雜度。第一次推送博客,如有錯誤之處還請勘正!

參考鏈接

https://ww2.mathworks.cn/help/matlab/ref/mink.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章