对数值矩阵的字典排序MATLAB实现
(2017-10-19 12:27:57)分类: MATLAB |
在数学和建模过程中,有时会遇到需要对一个数值矩阵,设为m*n型的A排序,这种排序无法通过调用MATLAB内部函数sort可以解决的。
下面详细解释字典排序的含义:假设有四组数据,每一组数据都5个数值,比如下面的initA
initA =
我们可以发现第一行(组)和第四行(组)的数值前两个都是一样的,第三个不一样了,而我们这个字典排序的做法是首先比较各行的第一个数值,更小的数值对应的行(或组)放在前面,比如这里的第一行和第二行比较,发现第一个数值5>4,所以第二行应该放在第一行前面;而第一行和第四行比较时,第一个数值相等,比较不出结果,接着比较第二个数值,还是一样,为此比较第三个数值发现6>3,因此第四行(或组)应该放在第一行的前面,依次类推。
至于函数的输入参数CompIndex的含义不再具体解释。详细理解参见代码及注释
代用代码和结果如下:
initA = [5 4 6 7 8;4 5 8 9 6;4 4 8 9 6;5 4 3 7 8];
A1 = SortDic(initA)
A1 =
function [A] = SortDic(initA,CompIndex)
% 根据CompIndex的指示对initA的每一行进行排序
% 首先比较第一列的值,没有结果才比较第二列的值,以此类推
%
% 如果CompIndex(ii) == 1表示按照从小到大比较(默认):取 < 号
% 如果CompIndex(ii) == -1表示按照从大到小比较:
取 > 号
%
if (nargin < 2) || (isempty(CompIndex)), CompIndex =
ones(1,size(initA,2)); end
if (nargin < 1) || (isempty(initA)),
error('Error:SortDic:输入需要排序的数值矩阵initA!'); end
A = initA;
[row,col] = size(A);
for ii = 1:(row - 1)
end
%
% end of function SortDic
function Index = Compare2Vec(v1,v2,CompIndex)
% 比较两个数字向量的大小,按照CompIndex(ii)的值比较
%
% 如果CompIndex(ii) == 1表示按照从小到大比较(默认):取 < 号
% 如果CompIndex(ii) == -1表示按照从大到小比较:
取 > 号
% 返回 Index 的值,0表示相等或没有结果
% Index: 1表示v1在v2前面, -1表示v1在v2后面
%
if nargin < 3, CompIndex = ones(1,length(v1)); end
n = length(v1);
Index = 0;
% 初始化为没有比较结果或相等结果
flag = 0;
for ii = 1:n
end
if flag > 0
else
end
%
% end of function Compare2Vec