我在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
问题是模式(样本)结果为零,这显然不正确。
答案 0 :(得分:3)
(这不是一个真正的答案,但超出了我的评论范围。)
我和gnovice有关,很可能是问题,或者你以某种方式重载了mode
命令。试试which mode
,clear 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
答案 1 :(得分:0)
由于MATLAB文档明确指出“模式函数对于离散或粗略舍入的数据最有用。连续概率分布的模式被定义为其密度函数的峰值。将模式函数应用于该分布的样本是不太可能提供对峰值的良好估计;计算直方图或密度估计并计算该估计的峰值会更好。“
这并不能解释为什么你得到0的结果,但它应该提醒你不要依赖mode
命令来获取浮点数据。我想知道如果将sample
变量中的值转换为整数并应用mode
命令,将会得到什么。