我有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)中选择最接近的值(大小)并继续。在最近的值之间进行插值或某种插值。你最有效率地做到这一点?
由您自行决定更改代码,对我来说效率不高。
答案 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)
中选择一个随机索引。