从另一个matlab中的一个向量中有效地找到一个值:错误检查是否为空

时间:2013-04-06 09:34:21

标签: matlab

我有3个向量:npdf, tn(:,1)tn(:,2),我在npdf逐行找到tn(:,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

每次在npdf中找到tn(:,2)的值时,它会从tn(:,1)中选择一个值。

问题在于:如果它无法在tn(:,2)中找到npdf中的值,那么我需要在tn(:,2)中选择最接近的值(大小)并继续。在最近的值之间进行插值或某种插值。你最有效率地做到这一点?

由您自行决定更改代码,对我来说效率不高。

1 个答案:

答案 0 :(得分: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)中选择一个随机索引。