假设我有两个随机双数组,这意味着一个x
坐标可能有多个y
值。
X = randi([-10 10],1,1000);
Y = randi([-10 10],1,1000);
然后我给出一个线方程:y=ax+b
。
我想根据每个x
点找到距离最近点的最近点。当我发现这一点时,我会发现它在特定范围内的邻居点。请原谅我可怜的英语,也许下面的图片可以提供更多帮助。
因为我有很多数据点,所以我希望有一种有效的方法来解决这个问题。
答案 0 :(得分:0)
如果您的X是离散的,您可以尝试以下方式:
xrng = [-10 10];
yrng = [-10 10];
a = rand;
b = rand;
f = @(x) a*x + b;
X = randi(xrng,1,1000);
Y = randi(yrng,1,1000);
ezplot(f,xrng);
hold on;
plot(X,Y,'.');
xx = xrng(1):xrng(2);
nbrSz = 2;
nx = diff(xrng);
nearestIdx = zeros(nx,1);
nbrIdxs = cell(nx,1);
for ii = 1:nx
x = xx(ii);
y = f(x);
idx = find(X == x);
[~,idxidx] = min(abs(y - Y(idx)));
nearestIdx(ii) = idx(idxidx);
nbrIdxIdxs = abs(Y(nearestIdx(ii)) - Y(idx)) <= nbrSz;
nbrIdxs{ii} = idx(nbrIdxIdxs);
plot(X(nearestIdx(ii)),Y(nearestIdx(ii)),'og');
plot(X(nearestIdx(ii)) + [0 0],Y(nearestIdx(ii)) + [-nbrSz nbrSz],'g')
plot(X(nbrIdxs{ii}),Y(nbrIdxs{ii}),'sy')
end