Re: [討論] 在一個矩陣中找出最多出現次數的向量

作者: celestialgod (天)   2016-07-15 01:01:36
※ 引述《popo14777 (草草)》之銘言:
: 小弟的程式如下
: A=[0 0 0 0 0 17 17 19 19 19 17 17 17 17 17]
: B=[0 0 0 0 0 22 22 24 24 24 24 24 24 24 24]
: C=[A;B]
: 0,0 出現5次
: 17,22 出現2次
: 19,24 出現3次
: 17,24 出現4次
: 直向量的個數有15個
: 在C的一個矩陣下挑出次數最多的直向量,且要最少個數,還要不包含零
: 所以挑第11組(17,24)的直向量,並取得11這個數值
: 小弟還有其他矩陣,例如矩陣為11*15(這個範例是2*15)
: 請問大大這樣的程式要如何寫呢?
: 謝謝
我不知道有沒有更好的方法XD
好讀版:http://pastebin.com/hANz1W33
A = [0 0 0 0 0 17 17 19 19 19 17 17 17 17 17];
B=[0 0 0 0 0 22 22 24 24 24 24 24 24 24 24];
C = [A; B]';
% 找出沒有0的列
idxFilterZeros = find(any(bsxfun(@ne, C, zeros(1, size(C, 2))), 2));
C2 = C(idxFilterZeros, :);
% 找出unique的列
[output, idx1, idx2] = unique(C2, 'rows');
% 用unique列的index去算frequencies
uni_idx = sort(unique(idx2));
% 計算unique列的frequencies
count = histc(idx2, uni_idx);
% 找到最大frequency的列
[~, maxIdx] = max(count);
% 叫出有最大frequency的列
out = C2(find(idx2 == uni_idx(maxIdx), 1, 'first'), :);
outIdx = idxFilterZeros(idx1(maxIdx));
已更正,outIdx就是所求
有問題再問吧XD
另外麻煩不要私信問,一切問題留在板上處理,謝謝
作者: popo14777 (草草)   2016-07-15 09:26:00
謝謝C大,小弟我要11這個數值要如何取得呢?因為後續的程式需要輸入挑出這組的數字11其實小弟最主要只是要得到11這個數值就好,不用列出17,24沒關係,謝謝
作者: name0625 (lawpy)   2016-07-15 10:02:00
就index啊,C2括號內的find那段就可以
作者: popo14777 (草草)   2016-07-15 13:31:00
n大,在C2括號內哪邊打index呢? 謝謝
作者: celestialgod (天)   2016-07-16 10:13:00
晚點再試試看,我沒注意到要11這個數值應該是idx=find(any(bsxfun(@ne, C, zeros(1, size(C, 2))));idx(maxIdx)試試看,不行再跟我說目前手邊沒電腦可以測試
作者: popo14777 (草草)   2016-07-16 15:03:00
謝謝C大,但還是沒有顯示11..謝謝C大,太感謝你了...

Links booklink

Contact Us: admin [ a t ] ucptt.com