【问题标题】:Problems with function mode in MatlabMatlab中函数模式的问题
【发布时间】:2012-02-25 13:43:02
【问题描述】:

我在 Matlab 中有一个名为 sample 的双数组,如下所示:

 sample = ...
  [0.4375 0.3750 0.5313 0.4375 0.8750 0.3750 0.5313 0.6563 0.3750 0.4375 ...
   0.5313 0.5313 0.8438 0.8438 0.4375 0.5313 0.5313 0.5313 0.4375 0.3750 ...
   0.4375 0.3750 0.3750 0.5313 0.3750 0.8750 0.5313 0.8438 0.4375 0.0313 ...
   0.3750 0.8438 0.8438 0.3750 0.8750 0.8750 0.5313 0.4375 0.8750 1.7813 ...
   0.3750 0.8750 0.3750 0.3750 0.3750 0.4375 0.3750 0.3750 0.8750 0.3750];


whos sample
  Name        Size            Bytes  Class     Attributes
  sample      1x50              400  double   

问题是 mode(sample) 给我的结果是零,这显然是不正确的。

【问题讨论】:

  • 第一次测试:在命令窗口中输入which mode。如果它在 MATLAB 工具箱中说它是一个变量或函数不是,那么你无意中隐藏了内置的 MODE 函数。
  • gnovice 的观点不谈,如果你的结果不是0 而是0.0313,我可以解释一下。 ;-) 无论如何,出于好奇,执行length(unique(sample)) 的结果是什么?
  • length(unique(sample)) 给我 12 !!

标签: arrays matlab double mode


【解决方案1】:

正如 MATLAB 文档明确指出的那样,“模式函数对离散或粗略舍入的数据最有用。连​​续概率分布的模式定义为其密度函数的峰值。将模式函数应用于该分布中的样本是不太可能提供峰值的良好估计;最好计算直方图或密度估计并计算该估计的峰值。"

这并不能解释为什么你会得到 0,但它应该提醒你不要依赖 mode 命令来获取浮点数据。我想知道如果将sample 变量中的值转换为整数并应用mode 命令会得到什么。

【讨论】:

    【解决方案2】:

    (这不是一个真正的答案,但超出了我的评论范围。)

    我在这方面是新手,很可能是问题,或者您以某种方式超载了mode 命令。尝试which modeclear mode 或只是重新启动 Matlab。


    无法重现,如下图:

    >> sample =[...
        0.4375    0.3750    0.5313    0.4375    0.8750    0.3750    ...
        0.5313    0.6563    0.3750    0.4375    0.5313 ...
        0.5313    0.8438    0.8438    0.4375    0.5313    0.5313    ...
        0.5313    0.4375    0.3750    0.4375    0.3750 ...
        0.3750    0.5313    0.3750    0.8750    0.5313    0.8438    ...
        0.4375    0.0313    0.3750    0.8438    0.8438 ...
        0.3750    0.8750    0.8750    0.5313    0.4375    0.8750    ...
        1.7813    0.3750    0.8750    0.3750    0.3750 ...
        0.3750    0.4375    0.3750    0.3750    0.8750    0.3750];
    >> mode(sample)
    ans =
                     0.375
    

    如果我添加小的随机数,我可以更改答案...但不能将其设置为零。

    >> format short g
    >> sample = sample .* (1+100*eps*randn(size(sample)))
    sample =
      Columns 1 through 11
           0.4375        0.375       0.5313       0.4375        0.875        0.375       0.5313       0.6563        0.375       0.4375       0.5313
      Columns 12 through 22
           0.5313       0.8438       0.8438       0.4375       0.5313       0.5313       0.5313       0.4375        0.375       0.4375        0.375
      Columns 23 through 33
            0.375       0.5313        0.375        0.875       0.5313       0.8438       0.4375       0.0313        0.375       0.8438       0.8438
      Columns 34 through 44
            0.375        0.875        0.875       0.5313       0.4375        0.875       1.7813        0.375        0.875        0.375        0.375
      Columns 45 through 50
            0.375       0.4375        0.375        0.375        0.875        0.375
    
    >> mode(sample)
    ans =
           0.0313
    

    看起来你介于两者之间,因为你的 length(unique(sample)) 返回 12。作为参考,我得到

    >> length(unique(sample))  %After the initial setup above
    ans =
         8
    
    
    >> length(unique(sample))  %After adding small random perturbations
    ans =
        50
    

    【讨论】:

      猜你喜欢
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      相关资源
      最近更新 更多