[討論] 第一列相同數值對應的第二列相加平均

看板MATLAB作者 (窩)時間7年前 (2017/09/18 12:18), 7年前編輯推噓4(407)
留言11則, 3人參與, 最新討論串1/1
怎麼樣把同一矩陣第一列的相同數值的找出來 然後對應的第二列相加平均阿 同一矩陣 兩列 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://www.ptt.cc/bbs/MATLAB/M.1505708339.A.B95.html

09/18 13:06, , 1F
idx = find(x(1,:) == a);
09/18 13:06, 1F

09/18 13:07, , 2F
y = mean(x(2, idx))
09/18 13:07, 2F

09/18 13:19, , 3F
假設重複只有一個且未知:
09/18 13:19, 3F

09/18 13:19, , 4F
[cc,ii]=sort(x(1,:))
09/18 13:19, 4F

09/18 13:20, , 5F
idx=find(! diff([cc(1),cc]))
09/18 13:20, 5F

09/18 13:22, , 6F
idx=ii(find(! diff([cc(1),cc]))) % 上面請改這個比較好
09/18 13:22, 6F

09/18 13:23, , 7F
x(2,idx) = mean( x(2,idx) )
09/18 13:23, 7F
感謝 如果假設不只一個 因為是一筆2萬行矩陣 第一行差不多有五六百多個會重複 請問怎麼改會比較好 ※ 編輯: ismyname (101.14.49.216), 09/18/2017 13:45:54

09/18 14:18, , 8F
用內建的accumarray或histcounts都可以
09/18 14:18, 8F

09/18 14:23, , 9F
A=accumarray(x(1,:)',x(2,:)',[],@mean);AA=find(A);
09/18 14:23, 9F

09/18 14:23, , 10F
[AA A(AA)]'
09/18 14:23, 10F

09/18 14:31, , 11F
histcounts好像不太行,那用accumarray就好了
09/18 14:31, 11F
感謝 accumarray可以執行 ※ 編輯: ismyname (101.15.241.126), 09/20/2017 13:48:39
文章代碼(AID): #1PlqapkL (MATLAB)
文章代碼(AID): #1PlqapkL (MATLAB)