我有一个示例矩阵A
A = [1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]
A =
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
我想找到每行最接近的值。
因此,如果X = 3.4
[MinDif,MinPos]=min(abs(A-X));
MinPos =
3 2 1 1 1
现在我想将这些位置填充到第二个矩阵B中。因此,位置(3,1)(2,2)(1,3)(1,4)(1,5)。
B = [10 11 12 13 14 ;11 12 13 14 15 ; 13 14 15 16 17; 14 15 16 17 18]
B =
10 11 12 13 14
11 12 13 14 15
13 14 15 16 17
14 15 16 17 18
我希望答案是
ans =
13 12 12 13 14
我尝试过
B(MinPos,find(MinPos))
但这并不能满足我的需求。
答案 0 :(得分:1)
您可以使用sub2ind
:
% given
A = [1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]
B = [10 11 12 13 14 ;11 12 13 14 15 ; 13 14 15 16 17; 14 15 16 17 18]
X = 3.4
[~, MinPos] = min(abs(A-X));
sz = size(A); % size of input
idx = sub2ind(sz,MinPos,1:sz(2)); % linear indices correlated with indices of minima
out = B(idx); % linear indexing of output
out = 13 12 12 13 14
答案 1 :(得分:0)
您可以使用'linear'选项来获取线性索引:
[MinDif,MinPos]=min(abs(A-X), [], 1, 'linear');
获取B中的相应元素:
B(MinPos)
填充元素:
B(MinPps) = MinDif;
答案 2 :(得分:0)
您可以尝试以下代码
B((size(B,1)-1)*(1:length(MinPos)) + MinPos)
这样
ans =
12 15 13 13 17