假设我有一个数组
d1 = 0 : 0.5 : 10
(d1表示随机变量FWIW的离散化。)假设我有另一个数组,例如,
d2 = [0.35 pi 4.2731]
现在我想要一个数组,它给出d1中与d2中每个元素最接近的元素的索引 - 实际上我甚至把d1中最大的元素小于d2的元素,即我想要的
ind = [2 8 10]
我该如何有效地做到这一点?如果我只需要d2的单个元素,我可以做类似
的事情dindex = 1:length(d1);
ind = min(dindex(d1 >= d2(3)))
但如果我想为d2中的所有元素执行此操作,我不能说ind = min(dindex(d1 >= d2))
。解决方案是什么?谢谢。
答案 0 :(得分:2)
您可能更喜欢使用bsxfun
-
[~,ind] = min(abs(bsxfun(@minus,d1,d2')),[],2)
答案 1 :(得分:1)
第二个想法,因为d1具有等间距的元素,我认为更简洁的方法是:
dlo = d1(1);
dhi = d1(length(d1));
ddelta = d1(2) - d1(1);
ind = round((min(dhi, max(dlo, d2)) - dlo) / ddelta) + 1;
(最小和最大确保d2条目在d1的范围内。)这要快得多 - 我的4008电话上0.038秒。
谢谢大家......这对本网站来说是非常积极的第一次体验。