[英]Matlab: find mode in range
我有一個矩陣像:
A=
10 31 32 22
32 35 52 77
68 42 84 32
我需要一個類似mode
但有范圍的功能,例如mymode(A,10)返回30,找到0-10,10-20,20-30 ......范圍內最常見的數字並返回范圍內的大多數。
您可以使用histc
將數據分類到您想要的范圍內,然后使用histc
輸出中的max
找到包含最多成員的bin
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之間。
[M,F] = mode( A((A>=2) & (A<=5)) ) %//only interested in range 2 to 5
...... M會給你模式,F會給你出現的頻率
> 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為每個范圍運行模式()。 您還可以使用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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.