所以我有这个矩阵:
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 = 2
和c = 3
正确无误。 19是最接近的值,19是第2行第3列。
为什么这不起作用呢? F只是abs(E1-A)
那么为什么我不能在查找公式中用abs(E1-A)
代替F?
答案 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