※ 引述《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)
: 請問大大這樣的程式要如何寫呢?
: 謝謝
假設你的C是 3-by-N, 2D int array,
(因此不需考慮round off error) <= 這個版本不需考慮round off error
%%%%
01 function [idx, vec] = find_mode_vec( C )
02
03 array_max = max( C(:) );
04 R3_to_R1_mapping = [(array_max+1)*(array_max+1), array_max+1, 1]*C;
05
06 most_freq_entry = mode(R3_to_R1_mapping);
07
08
09 idx = find( R3_to_R1_mapping, most_freq_entry, 'first');
10 vec = C(:, idx);
11
12 end
只適用於 max( C(:) ) 不太大的case,
如果太大, 請另設 R3_to_R1_mapping 所該使用的mapping function.