-5

我有一个如下所示的矩阵 -

x=[1 1 1 1 1;
   2 1 1 1 0;
   3 3 1 0 0;
   3 2 2 0 0];

但我想让这个矩阵像 -

 x=[2 2 3 0 0;
    1 3 3 0 0;
    1 1 1 2 0;
    1 1 1 1 1];

我已经尝试过“升序”,但是“0”将首先出现,但我想将“0”保留在最后,并制作一个矩阵,其中“1”的数量将在整个矩阵中从低到高。我是尝试但不能这样做。我需要 Matlab 专家的帮助。

4

1 回答 1

5

要在最后得到零,请将它们设置为无穷大 ( inf),排序,然后将它们设置回零

x=[1 1 1 1 1;
   2 1 1 1 0;
   3 3 1 0 0;
   3 2 2 0 0]

x(x == 0) = inf;
y = sort(x, 2, 'ascend');
y(y==inf) = 0;

现在计算1每行的 s 数量并从最少到最多重新排序

[~, I] = sort(sum(y==1,2));

y(I, :)

ans =

   2   2   3   0   0
   1   3   3   0   0
   1   1   1   2   0
   1   1   1   1   1

编辑:

示例数据不明确。将此作为输入:

x=[1 1 1 1 1;
   2 1 1 1 0;
   7 1 0 1 0;
   3 3 1 0 0;
   3 2 2 0 0];

现在 Moshen 的答案(即在对行进行排序后对每一列进行排序)返回

x =

   2   3   7   0   0
   1   2   3   0   0
   1   1   3   0   0
   1   1   1   2   0
   1   1   1   1   1

而我的回报

ans =

   2   2   3   0   0
   1   3   3   0   0
   1   1   7   0   0
   1   1   1   2   0
   1   1   1   1   1

我的保留了行的完整性。但目前尚不清楚 OP 追求的是哪个答案。

于 2013-08-14T11:59:09.423 回答