数据集(仅用于测试)如下:
0.1 0.2 0.3 0.4 0.5 1.1 1.2 1.3 1.4 1.5 0.1 0.2 0.3 0.4 0.5
我想得到最小的0.1和最大1.5之间的频率计数与bin(步长)是0.1。我已经在Matlab、Octave、Origin和AWK脚本中进行了测试然而,我得到了完全不同的结果。
一Matlab软件

data  = [0.1 0.2 0.3 0.4 0.5 1.1 1.2 1.3 1.4 1.5 0.1 0.2 0.3 0.4 0.5];
edge  = 0.1:0.1:1.5;
count = histc(data, edge);

结果是:
count = [2 4 0 2 2 0 0 0 0 0 1 1 1 1 1]

2八度
data  = [0.1 0.2 0.3 0.4 0.5 1.1 1.2 1.3 1.4 1.5 0.1 0.2 0.3 0.4 0.5];
edge  = 0.1:0.1:1.5;
count = histc(data, edge);

结果是:
count = [2 2 2 2 2 0 0 0 0 0 1 2 0 1 1]

三。起源
使用“频率计数”命令,设置min=0.1max=1.5step size=0.1.
结果是:
count = [2 4 0 2 2 0 0 0 0 0 2 1 1 1]

四锥子
{...;count[data/0.1]++;} ...

结果是:
count = [2 4 0 2 2 0 0 0 0 0 2 0 2 0 1]

为什么我会得到这些不同的结果是我做错了什么,还是我误解了“频率计数”的概念我认为以上结果都不正确你能告诉我该怎么做吗?

最佳答案

一个快速的方法是把边缘移动
Matlab软件:

data  = [0.1 0.2 0.3 0.4 0.5 1.1 1.2 1.3 1.4 1.5 0.1 0.2 0.3 0.4 0.5];
edge  = 0.05:0.1:1.55;
count = histc(data, edge)

结果:
  Columns 1 through 9

     2     2     2     2     2     0     0     0     0

  Columns 10 through 16

     0     1     1     1     1     1     0

注:当长度(边)=长度(数据)+1时,在末端有一个假峰值。
然后,正如Paul R建议的那样,它归结为精度和舍入你必须进入每个频率计数函数,看看它是如何被每种语言解释的如果我是你,我会把所有的都乘以10,使它们整数。
data=int8(data.*10)
edge  = 1:15;
count = histc(data, edge)

结果:
  Columns 1 through 9

     2     2     2     2     2     0     0     0     0

  Columns 10 through 15

     0     1     1     1     1     1

重要的是人类如何解释它,而不是机器如果你知道你乘以10^(你的精度)使它们变为整数,你就不在乎这台机器到底做了什么然后,如果数据中有不合理的数字,并且仍然看到错误,请检查浮点数的编码方式(http://en.wikipedia.org/wiki/Floating-point)
干杯。

10-08 08:18
查看更多