尝试在矩阵中找到最小值的索引在Octave中失败

时间:2014-07-31 09:45:28

标签: octave minimum

所以我有这个矩阵:

E1 = [54 5 2 4;4 5 19 29;31 4 2 9; 1 3 99 34]

假设我想找到最接近18.9的值的位置。让A = 18.9

我愿意

[r,c] = find(E1==min(min(abs(E1-A))))

这不起作用。它返回r = "[](0x1)" and c = "[](0x1)"

然而,

如果我第一次这样做:

F = abs(E1-A)然后再做

[r,c] = find(F==min(min(F))) 

这会使r = 2c = 3正确无误。 19是最接近的值,19是第2行第3列。

为什么这不起作用呢? F只是abs(E1-A)那么为什么我不能在查找公式中用abs(E1-A)代替F?

1 个答案:

答案 0 :(得分:4)

min(min(abs(E1-A)))
ans =  0.10000

这为你提供了超过绝对差异的最小值。然后将它与具有绝对值的E1进行比较。这与您的第二个公式

完全不同
[r,c] = find(F==min(min(F)))

你在哪里与包含E1和A之间差异的绝对值的矩阵进行最小差异。如果用你的第二个公式F替换为abs(E1-A)你会得到

[r,c] = find(abs(E1-A)==min(min(abs(E1-A))))

哪个也行。不过我建议采用另一种方法:

E1 = [54 5 2 4;4 5 19 29;31 4 2 9; 1 3 99 34];
A = 18.9;
# get the index ( Column-major order) of the minimum
idx = nthargout (2, @min, abs (E1-A)(:));
# this returns 10
# convert it ro row, column
[r, c] = ind2sub (size (E1), idx)
r =  2
c =  3