声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 11962|回复: 5

[编程技巧] [转帖]在matlab中对矩阵的值按某一列排序

[复制链接]
发表于 2006-4-16 08:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  1. % use : 在matlab中对矩阵的值按某一列排序。Made by jdg@hit
  2. % parameters: matrix_sort(a,row,dim,mode)
  3. %a :是 矩阵。 row :是第几行,或者 第几列,按这个进行排序。
  4. %dim:dimension along ,指定row参数的意义,1 是代表列 ,2 是代表 行
  5. % mode : 'ascend' 升序, 'descend' 降序。
  6. % example: matrix_sort(a,1,1,'ascend')

  7. % nargin 输入参数个数。nargout 输出参数个数。
  8. % 输入参数用 varargin{1} ,varargin{2} 。输出参数用 varargout{1} = 或者 varargout(1) = { 结果 };

  9. function [varargout]= matrix_sort(varargin)
  10. if nargin < 2 | nargin > 4
  11. varargout(1)={'miss parameters!'};
  12. return;
  13. elseif nargin==2
  14. varargin{3}=1;
  15. varargin{4}='ascend';
  16. elseif nargin==3
  17. varargin{4}='ascend';
  18. end

  19. a=varargin{1};
  20. if varargin{3}==1
  21. [temp,index] = sort(a(:,varargin{2}),varargin{3},varargin{4});
  22. result(:,:) = a(index,:);
  23. elseif varargin{3}==2
  24. [temp,index] = sort(a(varargin{2},:),varargin{3},varargin{4});
  25. result(:,:) = a(:,index);
  26. else
  27. varargout(1)={'The third parameter may be wrong !'};
  28. return;
  29. end
  30. varargout{1} = result(:,:);
复制代码

[ 本帖最后由 suffer 于 2006-10-9 20:35 编辑 ]
回复
分享到:

使用道具 举报

发表于 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编辑过]

发表于 2009-4-8 21:06 | 显示全部楼层

回复 沙发 bainhome 的帖子

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

评分

1

查看全部评分

发表于 2009-4-9 14:25 | 显示全部楼层

回复 板凳 h287119285 的帖子

这个是新旧版的问题, 新版允许3各参数!
发表于 2009-10-2 21:21 | 显示全部楼层
看到这个帖子,新学了个命令,原来也是自己编,谢谢!
发表于 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

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-15 23:01 , Processed in 0.063322 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表