簡體   English   中英

Matlab:在范圍內查找模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM