我有一个等距值的变量(假设为values=0:1e-3:1
)。我想从values
得到最接近均匀随机值的值及其对应索引(假设为x=rand
)。
我可以做[value,vIdx]=min(abs(values-x))
,这是我能做的最简单的最小化。 不幸的是,min
函数不会利用数据中的一个属性,即凸起。我不需要搜索所有索引,因为只要找到一个不比之前更小的索引,我就找到了全局最小值。说,我不想用matlab min函数代替一个慢的循环,这取决于它与我将开始的值的距离。可以使用许多方法,作为黄金部分,但我不确定使用matlab fmincon是否比min
方法更快。
有没有人有任何提示/想法如何比使用描述的min
方法更快地获得所需的值?我有空的时候会检查时间表现,但如果有人事先知道答案,请告诉我。
可能的应用程序:对齐最近的图形数据
答案 0 :(得分:3)
由于您的积分是等距的,您可以使用值x
来查找索引:
vIdx = 1+round(x*(numel(values)-1));
您的想法是将时间间隔[0, 1]
划分为numel(values)-1
个相等大小的间隔。现在,通过将x
乘以该数字,您可以将间隔映射到[0, numel(values)-1]
,其中您的点将映射到整数值。现在使用round
得到最接近的一个,加上1得到MATLAB所需的基于一的索引。