2

我有类似以下矩阵的数据: A = [2 5 10 4 10; 2 4 5 1 2; 6 2 1 5 4];

一个=

 2     5    10     4    10
 2     4     5     1     2
 6     2     1     5     4

我想根据以下标准按最后一行排序:

如果第一个元素(第三行)和第二个元素(第三行)之间的差异小于或等于 2 - 然后移动该列(在这种情况下,第二个元素向右移动两列)。然后对所有列执行此操作,直到没有两个元素(最后一行)在 2 之内)

乙 =

 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。

有什么建议么?

4

1 回答 1

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
于 2012-09-16T21:46:28.790 回答