数组每行包含二进制数:一行表示一个二进制数。它们没有顺序所以我试图找到一个命令,通过它可以将它们按升序排序,怎么做?
输入
>> [1 0 0 1 1; 0 0 1 0 0; 1 0 1 0 0]
ans =
1 0 0 1 1
0 0 1 0 0
1 0 1 0 0
0 0 0 0 1
目标:我可以通过输入获得以下输出的命令?
0 0 0 0 1
0 0 1 0 0
1 0 0 1 1
1 0 1 0 0
答案 0 :(得分:1)
您可以通过转换为字符串(num2str
)然后从二进制字符串转换为数字(bin2dec
)来实现:
[vv ii] = sort(bin2dec(num2str(data)));
data_sorted = data(ii,:);
答案 1 :(得分:1)
Beaker在评论中回答说“你应该能够使用sortrows在第n列到第1列进行基数排序。” - 它有效!然后Luis Mendo有一种存储原始定位的方法,所以把想法放在一起,vuola!
>> A=[1 0 0 1 1; 0 0 1 0 0; 1 0 1 0 0;0 0 0 0 1]
[vv ii]=sortrows(A)
A =
1 0 0 1 1
0 0 1 0 0
1 0 1 0 0
0 0 0 0 1
vv =
0 0 0 0 1
0 0 1 0 0
1 0 0 1 1
1 0 1 0 0
ii =
4
2
1
3
答案 2 :(得分:1)
根据我在评论中提出的建议,“你应该能够使用排序器对列n下至1进行基数排序。”,OP得到以下代码:
>> A=[1 0 0 1 1; 0 0 1 0 0; 1 0 1 0 0;0 0 0 0 1];sortrows(A)
ans =
0 0 0 0 1
0 0 1 0 0
1 0 0 1 1
1 0 1 0 0
现在已经包含了Luis关于索引的很酷的想法。