作者ismyname (窝)
看板MATLAB
标题[讨论] 第一列相同数值对应的第二列相加平均
时间Mon Sep 18 12:18:57 2017
怎麽样把同一矩阵第一列的相同数值的找出来
然後对应的第二列相加平均阿
同一矩阵 两列
x= 1 1 10 5 17 1 18 2
4 3 2 1 8 8 4 5
怎麽把 第一列相同 这个例子里是1提出
对应1的第二列 这个例子里分别是 4 3 8 三个数相加平均阿(平均出来为5)
变成x= 1 2 5 10 17 18
5 5 1 2 8 4
x=[1,1,10,5,17,1,18,2];
x=[x; 4 3 2 1 8 8 4 5];
x=sortrows(x',[1 2])'
x(1,:)
x(2,:)
figure
plot(x(1,:),x(2,:))
感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.14.49.216
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1505708339.A.B95.html
1F:→ LiamIssac: idx = find(x(1,:) == a); 09/18 13:06
2F:→ LiamIssac: y = mean(x(2, idx)) 09/18 13:07
3F:推 sppmg: 假设重复只有一个且未知: 09/18 13:19
4F:→ sppmg: [cc,ii]=sort(x(1,:)) 09/18 13:19
5F:→ sppmg: idx=find(! diff([cc(1),cc])) 09/18 13:20
6F:→ sppmg: idx=ii(find(! diff([cc(1),cc]))) % 上面请改这个比较好 09/18 13:22
7F:→ sppmg: x(2,idx) = mean( x(2,idx) ) 09/18 13:23
感谢 如果假设不只一个 因为是一笔2万行矩阵
第一行差不多有五六百多个会重复 请问怎麽改会比较好
※ 编辑: ismyname (101.14.49.216), 09/18/2017 13:45:54
8F:推 sunev: 用内建的accumarray或histcounts都可以 09/18 14:18
9F:推 sunev: A=accumarray(x(1,:)',x(2,:)',[],@mean);AA=find(A); 09/18 14:23
10F:→ sunev: [AA A(AA)]' 09/18 14:23
11F:推 sunev: histcounts好像不太行,那用accumarray就好了 09/18 14:31
感谢 accumarray可以执行
※ 编辑: ismyname (101.15.241.126), 09/20/2017 13:48:39