happy 发表于 2006-4-16 08:04

[转帖]在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 编辑 ]

bainhome 发表于 2006-6-16 10:37

个人看法供参考:上述例子自己编程做练习是很不错的,不过v7之后感觉如果实用的话,内置命令sortrows是更好的选择:<br>&gt;&gt; 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>&gt;&gt; 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编辑过]

h287119285 发表于 2009-4-8 21:06

回复 沙发 bainhome 的帖子

版主发的程序很好用,不过开始运行时会报错说,sort 函数输入量过多,就在程序的第16和16行,13改成 = sort(a(:,varargin{2}),varargin{3});就可以用了。:handshake

ChaChing 发表于 2009-4-9 14:25

回复 板凳 h287119285 的帖子

这个是新旧版的问题, 新版允许3各参数!

dir51888 发表于 2009-10-2 21:21

看到这个帖子,新学了个命令,原来也是自己编,谢谢!

huntsmanydw 发表于 2012-8-30 17:52

利用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]
查看完整版本: [转帖]在matlab中对矩阵的值按某一列排序