如何根据特定行(Matlab)中包含的条件对列进行排序?

时间:2012-09-16 18:27:49

标签: matlab sorting matrix

我有以下矩阵的数据: 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.

有什么建议吗?

1 个答案:

答案 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