0

私は3つのベクトルを持っています:npdf, tn(:,1)そして、行ごとにintn(:,2)の値を見つけています: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

の値を見つけるたびに、から値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 に答える