我具有矩陣狀:返回30Matlab的:找到模式在範圍
A=
10 31 32 22
32 35 52 77
68 42 84 32
我需要一個函數等mode
但與範圍內,例如mymode(A,10),發現在範圍最頻繁的數0-10,10-20,20-30,....並返回範圍內的大部分數字。
我具有矩陣狀:返回30Matlab的:找到模式在範圍
A=
10 31 32 22
32 35 52 77
68 42 84 32
我需要一個函數等mode
但與範圍內,例如mymode(A,10),發現在範圍最頻繁的數0-10,10-20,20-30,....並返回範圍內的大部分數字。
您可以使用histc
來斌你的數據到你的慾望的範圍,然後找到倉上的histc
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
輸出爲您具體的例子使用max
最委員這將返回
ans =
30 40
與您所需的輸出相匹配,如在最值躺在我想通過我們可能會丟失自己的目標不同答案的數目30和40之間
[M,F] = mode( A((A>=2) & (A<=5)) ) %//only interested in range 2 to 5
...,其中M會給你的模式和F會給你occurence的頻率
> 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
>
。這是我的解釋。
如果您想要輸出多個範圍並且想要輸出每個範圍的最常用數字,請創建一個包含所有所需範圍(它們可以重疊)的單元格,並使用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]