我有一个像下面这样的矩阵 -
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专家的帮助。
答案 0 :(得分: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
的数量,并从最少到最多重新排序
[~, 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的回答是什么。