MATLAB“逐元素”逻辑索引

时间:2014-03-24 02:14:19

标签: matlab indexing

假设我有一个数组

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))。解决方案是什么?谢谢。

2 个答案:

答案 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秒。

谢谢大家......这对本网站来说是非常积极的第一次体验。