我有一个如下所示的矩阵 -
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 专家的帮助。
我有一个如下所示的矩阵 -
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 专家的帮助。
要在最后得到零,请将它们设置为无穷大 ( 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 追求的是哪个答案。