[转帖]在matlab中对矩阵的值按某一列排序
% use : 在matlab中对矩阵的值按某一列排序。Made by jdg@hit% parameters: matrix_sort(a,row,dim,mode)
%a :是 矩阵。 row :是第几行,或者 第几列,按这个进行排序。
%dim:dimension along ,指定row参数的意义,1 是代表列 ,2 是代表 行
% mode : 'ascend' 升序, 'descend' 降序。
% example: matrix_sort(a,1,1,'ascend')
% nargin 输入参数个数。nargout 输出参数个数。
% 输入参数用 varargin{1} ,varargin{2} 。输出参数用 varargout{1} = 或者 varargout(1) = { 结果 };
function = matrix_sort(varargin)
if nargin < 2 | nargin > 4
varargout(1)={'miss parameters!'};
return;
elseif nargin==2
varargin{3}=1;
varargin{4}='ascend';
elseif nargin==3
varargin{4}='ascend';
end
a=varargin{1};
if varargin{3}==1
= sort(a(:,varargin{2}),varargin{3},varargin{4});
result(:,:) = a(index,:);
elseif varargin{3}==2
= sort(a(varargin{2},:),varargin{3},varargin{4});
result(:,:) = a(:,index);
else
varargout(1)={'The third parameter may be wrong !'};
return;
end
varargout{1} = result(:,:);
[ 本帖最后由 suffer 于 2006-10-9 20:35 编辑 ] 个人看法供参考:上述例子自己编程做练习是很不错的,不过v7之后感觉如果实用的话,内置命令sortrows是更好的选择:<br>>> a=round(10*rand(5))<br>a =<br> 10 8 6 4 1<br> 2 5 8 9 4<br> 6 0 9 9 8<br> 5 8 7 4 0<br> 9 4 2 9 1<br>>> b=sortrows(a,3)%按第三列排序<br>b =<br> 9 4 2 9 1<br> 10 8 6 4 1<br> 5 8 7 4 0<br> 2 5 8 9 4<br> 6 0 9 9 8<br>======================================<br>哦,没注意...这里是实例赏析区,抱歉,我的帖子版主删了吧(自己不会删-_-|||)
[此贴子已经被作者于2006-6-16 10:40:48编辑过]
回复 沙发 bainhome 的帖子
版主发的程序很好用,不过开始运行时会报错说,sort 函数输入量过多,就在程序的第16和16行,13改成 = sort(a(:,varargin{2}),varargin{3});就可以用了。:handshake回复 板凳 h287119285 的帖子
这个是新旧版的问题, 新版允许3各参数! 看到这个帖子,新学了个命令,原来也是自己编,谢谢! 利用sortrows函数就可以了啊。不用这么复杂.举例如下:
b=sortrows(a,2) %a 为要排序的矩阵。2表示按第几列进行排序,正数代表升序,负数代表降序。
%将矩阵a按照第2列的升序排列,其他列不会作升序排列,而是将跟随着第2列 的变化,保持一一对应。
b=sortrows(a,-3)
%将矩阵a按照第3列的降序排列,其他列将跟随着第3列 的变化,保持一一对应。
data =
1 3 2
7 6 5
4 9 8
sortrows(data,1)
ans =
1 3 2
4 9 8
7 6 5
sortrows(data,-1)
ans =
7 6 5
4 9 8
1 3 2
页:
[1]