我有以下矩阵的数据: A = [2 5 10 4 10; 2 4 5 1 2; 6 2 1 5 4];
A =
2 5 10 4 10
2 4 5 1 2
6 2 1 5 4
我想根据以下标准对最后一行进行排序:
如果第一个元素(第三行)和第二个元素(第三行)之间的差异小于或等于2,则移动该列(在这种情况下,第二个列向右两列) 。然后对所有列执行此操作,直到没有两个元素(最后一行)的差异在2)
之间B =
2 5 4 10 10
2 4 1 5 2
6 2 5 1 4
其中(6-2 = 4)(2-5 = 3)(5-1 = 4)(1-4 = 3)
最后一行的所有元素与其旁边的元素之间的差异最终大于2.
有什么建议吗?
答案 0 :(得分:2)
这是一种可能的解决方案:
A = [2 5 10 4 10; 2 4 5 1 2; 6 2 1 5 4];
B = A;
MatrixWidth = size(A, 2);
CurIndex = 1;
%# The second-last pair of the bottom row is the last pair to be compared.
while(CurIndex+2 <= MatrixWidth)
Difference = abs(A(3,CurIndex) - A(3,CurIndex+1));
%# If the right side of comparison is not yet the second-last index.
if ((Difference <= 2) && (CurIndex+3 <= MatrixWidth))
B = [ B(:, 1:CurIndex), B(:, CurIndex+2), B(:, CurIndex+1), B(:, CurIndex+3:end) ];
%# If the right side of the comparison is already the second-last index.
elseif (Difference <= 2)
B = [ B(:, 1:CurIndex), B(:, CurIndex+2), B(:, CurIndex+1) ];
end
CurIndex = CurIndex + 1;
end