为什么Matlab octave origin awk中的频率计数与同一数据集的结果完全不同?

Don*_*ong 3 matlab awk frequency octave

有一个数据集(仅用于测试)如下: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脚本中进行了测试.但是,我得到了完全不同的结果.

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.1:0.1:1.5;
count = histc(data, edge);
Run Code Online (Sandbox Code Playgroud)

结果是:

count = [2 4 0 2 2 0 0 0 0 0 1 1 1 1 1]
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

结果是:

count = [2 2 2 2 2 0 0 0 0 0 1 2 0 1 1]
Run Code Online (Sandbox Code Playgroud)

3.起源

使用命令"频率计数",设置min=0.1,max=1.5,step size=0.1.

结果是:

count = [2 4 0 2 2 0 0 0 0 0 2 1 1 1]
Run Code Online (Sandbox Code Playgroud)

4. AWK

{...;count[data/0.1]++;} ...
Run Code Online (Sandbox Code Playgroud)

结果是:

count = [2 4 0 2 2 0 0 0 0 0 2 0 2 0 1]
Run Code Online (Sandbox Code Playgroud)

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

Wli*_*Wli 5

一个快速的方法是将边缘移位

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)
Run Code Online (Sandbox Code Playgroud)

结果:

  Columns 1 through 9

     2     2     2     2     2     0     0     0     0

  Columns 10 through 16

     0     1     1     1     1     1     0
Run Code Online (Sandbox Code Playgroud)

注意:当长度(边缘)=长度(数据)+1时,末尾有一个虚假的峰值.

然后正如Paul R所说,它归结为精确和圆整.您必须进入每个频率计数功能,以查看每种语言如何解释它.如果我是你,我会将所有东西乘以10并使它们成为int.

data=int8(data.*10)
edge  = 1:15;
count = histc(data, edge)
Run Code Online (Sandbox Code Playgroud)

结果:

  Columns 1 through 9

     2     2     2     2     2     0     0     0     0

  Columns 10 through 15

     0     1     1     1     1     1
Run Code Online (Sandbox Code Playgroud)

重要的是人类如何解释它,而不是机器.如果你知道你乘以10 ^(你的精度)并使它们成为int,你就不关心机器的真正作用.然后,如果数据中有无理数,但仍然看到错误,请检查浮点数的编码方式(http://en.wikipedia.org/wiki/Floating_point)

干杯.