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