0

我有 3 个向量:npdf, tn(:,1)并且正在逐行tn(:,2)查找 in 的值npdftn(:,2)

    [npdf(1:20,1), tn(1:20,:)]

    ans =

    8.0000    3.0000    1.0000
   11.0000    2.9167    1.0000
    1.0000    3.3000    1.0000
   11.0000    1.2167    1.0000
    5.0000    2.8167    1.0000
    1.0000    2.4000    1.0000
    2.0000    2.4500    1.0000
    4.0000    0.2500    1.0000
   15.0000    3.7500    1.0000
   15.0000    4.9167    1.0000
    1.0000    2.8167    2.0000
   17.0000    0.2500    2.0000
   15.0000    1.0000    3.0000
    4.0000    3.0000    3.0000
    8.0000    0.5833    3.0000
    1.0000    0.5833    3.0000
    3.0000    5.0000    5.0000
   11.0000    3.7500    6.0000
    8.0000    3.0000    7.0000
   15.0000    2.8000    7.0000

for i=1:length(npdf)
  [LOCA,~]=ismember(tn(:,2),npdf(i,1,1));
  dummy=find(LOCA~=0);
  tpdf(i,1)=tn(randi(length(dummy),1,1),1);
end

每次找到 in 的值时npdftn(:,2)它都会从 中选择一个值tn(:,1)

这就是问题所在:如果它无法从 tn(:,2) 中的 npdf 中找到值,那么我需要在 tn(:,2) 中选择最接近的值(以大小为单位)并继续。要么是最接近的值之间的插值,要么是某种插值。你将如何最有效地做到这一点?

由您自行决定更改代码,对我来说它看起来不是很有效。

4

1 回答 1

1

可以通过knnsearch以下方式轻松完成:

 [idx,D]=knnsearch(tn(:,2),npdf,'K',size(tn,1));
 for i=1:size(D,1)
    tpdf(i,1)=tn(randi(sum(D(i,:)==min(D(i,:))),1,1),1);
 end

它找到每个值npdf到 中所有值的距离tn。然后它只考虑最接近的值。tn(:,1)然后它根据您的代码选择一个随机索引。

于 2013-04-07T09:16:27.080 回答