3

次のようなマトリックスがあります。

A=
    10 31 32 22
    32 35 52 77
    68 42 84 32

mode30 を返し、範囲 0-10、10-20、20-30 で最も頻度の高い番号を見つけ、範囲内のほとんどの番号を返す mymode(A,10) のような、しかし範囲を持つ関数が必要です。

4

4 に答える 4

4

を使用して、データを希望の範囲にビン化し、出力でhistc使用しているメンバーが最も多いビンを見つけることができますmaxhistc

ranges = 0:10:50;                 % your desired ranges
[n, bins] = histc(A(:), ranges);  % bin the data
[v,i] = max(n);                   % find the bin with most occurrences

[ranges(i) ranges(i+1)]           % edges of the most frequent bin

あなたの特定の例では、これは戻ります

ans =

    30    40

A のほとんどの値が 30 から 40 の間にあるため、これは必要な出力と一致します。

于 2012-09-14T07:24:18.943 に答える
1
[M,F] = mode(  A((A>=2) & (A<=5))  ) %//only interested in range 2 to 5

...ここで、M はモードを示し、F は発生頻度を示します。

于 2012-09-14T07:15:37.223 に答える
1
> A = [10 31 32 22; 32 35 52 77; 68 42 84 32]
A =

   10   31   32   22
   32   35   52   77
   68   42   84   32

> min = 10
min =  10
> max = 40
max =  40
> mode(A(A >= min & A <= max))
ans =  32
> 
于 2012-09-14T07:17:15.537 に答える
1

さまざまな回答の数から、あなたの目標を逃している可能性があると思います。これが私の解釈です。

多くの範囲が必要で、範囲ごとに最も頻繁な数値を出力する場合は、必要なすべての範囲を含むセルを作成し (重複する可能性があります)、 cellfun を使用して範囲ごとに mode() を実行します。同様の方法で arrayfun を使用して、目的の範囲のセルを作成することもできます。

A = [10 31 32 22; 32 35 52 77; 68 42 84 32];

% create ranges
range_step = 10;
range_start=[0:range_step:40];
range=arrayfun(@(r)([r r+range_step]), range_start, 'UniformOutput', false)

% analyze ranges
o = cellfun(@(r)(mode(A(A>=r(1) & A<=r(2)))), range, 'UniformOutput', false)

o = 
[10]    [10]    [22]    [32]    [42]
于 2012-09-14T08:04:07.927 に答える