作者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/m.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