找回密码
 注册
Simdroid-非首页
查看: 104|回复: 5

矩阵按第一列排序,第一列有重复的记录,则找出第二列...

[复制链接]
发表于 2013-6-10 17:26:46 | 显示全部楼层 |阅读模式 来自 湖南长沙
悬赏30仿真币未解决
矩阵按第一列排序,第一列有重复的记录,则找出第二列的最大值,并找出第二列最大值出现的位置,怎么实现?

矩阵
a=
1 2 3
2 5 4
1 3 4
1 4 1
2 9 4
3 1 3

排序以后
1 2 3
1 5 4
1 4 1
2 5 4
2 9 4
3 1 3

第一列有前三行相同1,则找出第二列这三行的最大值5;
第一列有有两行相同2,则找出第二列这两行的最大值9;
……
怎么实现,望各位大侠帮帮忙!



发表于 2013-6-10 23:41:47 | 显示全部楼层 来自 四川
Simdroid开发平台
本帖最后由 lengyunfeng 于 2013-6-11 08:15 编辑

循环解法如下:
  1. clear
  2. A=[1 2 3;2 5 4;1 3 4;1 4 1;2 9 4;3 1 3];
  3. A=sortrows(A,1);
  4. B=tabulate(A(:,1));
  5. for n=1:size(B,1)
  6. B(n,3)=A(sum(B(1:n,2)),2);
  7. end
  8. B
复制代码
非循环解法如下:
  1. clear
  2. A=[1 2 3;2 5 4;1 3 4;1 4 1;2 9 4;3 1 3];
  3. A=sortrows(A,1);
  4. B=tabulate(A(:,1));
  5. C=cumsum(B(:,2));
  6. B(:,3)=A(C,2)
复制代码
返回的结果如下:
  1. B =

  2.      1     3     4
  3.      2     2     9
  4.      3     1     1
复制代码
其中第一行表示,原始数组A第一列中1出现了3次,相应的第二列元素最大值为4,其余类推。
ps:你自己给出的答案有点问题。

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-6-11 22:40:46 | 显示全部楼层 来自 湖南长沙
lengyunfeng 发表于 2013-6-10 23:41
循环解法如下:非循环解法如下:返回的结果如下:其中第一行表示,原始数组A第一列中1出现了3次,相应的第二列 ...

高手,果然是版主。

我弄了半天,写的还比较复杂,效率还比较低:dizzy:
回复

使用道具 举报

发表于 2013-6-12 06:54:28 来自手机 | 显示全部楼层 来自 河北
后面的那个功能可以用accumarray来实现,直接用就可以
回复

使用道具 举报

 楼主| 发表于 2013-6-12 21:04:10 | 显示全部楼层 来自 湖南长沙
qibbxxt 发表于 2013-6-12 06:54
后面的那个功能可以用accumarray来实现,直接用就可以

谢谢老大,我再看看这个accumarray

:handshake
回复

使用道具 举报

发表于 2013-6-12 22:44:32 | 显示全部楼层 来自 河北廊坊
timothy1985 发表于 2013-6-12 21:04
谢谢老大,我再看看这个accumarray
  1. clear
  2. A=[1 2 3;2 5 4;1 3 4;1 4 1;2 9 4;3 1 3];
  3. [unique(A(:,1)),accumarray(A(:,1),1),accumarray(A(:,1),A(:,2),[],@max)]
复制代码
  1. ans =

  2.      1     3     4
  3.      2     2     9
  4.      3     1     1
复制代码

评分

1

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-30 08:39 , Processed in 0.030486 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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