如何找到数组中给定数字的最接近值?

时间:2014-06-07 10:47:16

标签: matlab

情况如下:

我必须使用数组,表示正域x,以及另一个具有该域z

功能的数组

现在,对于给定的点y,我希望在最近的位置找到z值。为此我写了以下函数:

R0 = @(y) z(find(abs( abs(y). -  r) == min(abs(abs(y). - r))))

(使用abs代表y的负值,因为z是对称的)

除非y是向量,否则这样做效果非常好。所以,如果我使用以下代码:

y = [-1:0.01:1];
R0(y);

我收到以下错误:

Error using  == 
Matrix dimensions must agree.

尝试调试它,我看到find语句返回1 * 0矩阵,因此没有。这是y数组中r ACTUALLY EXSIST的值。

我真正想要的是获得一个新的向量,为z的每个值分配y中最接近的值。

其他可能会使用完全不同的解决方案,因此我更倾向于理解为什么这个解决方案不起作用以及如何使其工作。

由于

2 个答案:

答案 0 :(得分:1)

我假设所有r,z,y都是行向量;

根据您提供的代码,您似乎需要z中的值,其索引与最接近r的{​​{1}}中的值的索引相同。以下代码对行向量scalar y执行相同的操作。

y

答案 1 :(得分:1)

你的问题不是很清楚。如果我理解正确,对于y的每个元素,您希望在z中找到最接近的元素。

y = [1 2 3 4 5]; %// example data
z = [0 2.5 6]; %// example data
d = abs(bsxfun(@minus, y(:).', z(:))); %'// compute distance for all pairs
[~, ind] = min(d); %// index of minimizer in z for each value of y
result = z(ind);

在此示例中,

result =
        0    2.5000    2.5000    2.5000    6.0000