[討論] 關於矩陣取相同元素次數

看板MATLAB作者 (分析師)時間10年前 (2015/08/06 18:29), 編輯推噓3(3016)
留言19則, 3人參與, 最新討論串1/1
目前有一亂數矩陣 x=round(rand(100,2).*10) 假設前五項是 1 1 1 1 1 1 1 1 2 2 經過運算會出現一新矩陣 1 1 4(1 1矩陣出現4次) 2 2 1 請問一下這種該如何下手呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.58.176.226 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1438856981.A.6AB.html

08/06 19:36, , 1F
unique(x, 'rows')在每一行做迴圈計算相等的列數
08/06 19:36, 1F

08/06 20:04, , 2F
使用此函數不就把相同向量剔除了嗎? 請問該如何計算次數呢?
08/06 20:04, 2F

08/06 20:14, , 3F
m=unique(x, 'rows'); count=zeros(size(m, 1), 1);
08/06 20:14, 3F

08/06 20:16, , 4F
for i=1:size(m, 1), count(i)=sum(all(x=m(i, :),
08/06 20:16, 4F

08/06 20:16, , 5F
1));end;
08/06 20:16, 5F

08/06 20:30, , 6F
非常感謝。我後來搭配accumarray寫出來了 感恩S
08/06 20:30, 6F

08/09 14:32, , 7F
啊!這篇文章太晚出現了XD 雖然看著下面的回應又多學
08/09 14:32, 7F

08/09 14:32, , 8F
到了新的東西
08/09 14:32, 8F

08/09 14:33, , 9F
我的方法是 [C,~,ic]=unique(x,'rows'); count=histc(
08/09 14:33, 9F

08/09 14:33, , 10F
ic,unique(ic));
08/09 14:33, 10F

08/09 14:34, , 11F
除了histc 也可以嘗試使用 count=sum(bsxfun(@eq,ic,u
08/09 14:34, 11F

08/09 14:34, , 12F
nique(ic)'));
08/09 14:34, 12F

08/09 14:42, , 13F
原po應該是用accumarray(ic, ones(size(x,1),1))
08/09 14:42, 13F

08/09 14:48, , 14F
後來搜尋到這個 http://tinyurl.com/o99zwe7
08/09 14:48, 14F

08/09 14:49, , 15F
我覺得第一個方法很酷
08/09 14:49, 15F

08/09 15:47, , 16F
哦哦!話說我當初好像也有查到tabulate,但它只吃向量,
08/09 15:47, 16F

08/09 15:47, , 17F
所以後來想著想著才想起ic才解決這個只吃向量的問題
08/09 15:47, 17F

08/09 15:48, , 18F
目前小弟還剛開始使用matlab一個月而已,還需要跟大家
08/09 15:48, 18F

08/09 15:48, , 19F
多多學習:D
08/09 15:48, 19F
文章代碼(AID): #1LmpSLQh (MATLAB)
文章代碼(AID): #1LmpSLQh (MATLAB)