Python和科学计算认证群组  - 讨论区

标题:从数组里面找出符合要求的数

2010年11月27日 星期六 06:25

群组有文件共享功能,你可以上传到那里,或者直接发给我: ruoyu0088@gmail.com

2010年11月27日 星期六 10:40

好的,发您邮箱了

2010年11月27日 星期六 11:30

问题是因为浮点数的精度造成的。如下修改之后就正确了。就是不要用i+0.01作为范围,而用t中的前后两个数值作为范围:

import numpy as np

x = np.loadtxt("data.txt")

t = np.arange(0,np.ceil(np.max(x)*100)/100.0+0.02, 0.01)

p = 0

l = []

for i,i2 in zip(t[:-1], t[1:]):

    in_this = x[(x>=i)*(x<i2)]

    p += float(in_this.size)/len(x)

    l.append(p)

print p

精度问题可以通过下面的程序验证,即t[96]-t[95]并不正好是0.01,因为浮点数无法精确表示0.01这个数值。

In [18]: t = np.arange(0, 1.0, 0.01)

In [19]: t[95]

Out[19]: 0.95000000000000007

In [20]: t[96]

Out[20]: 0.95999999999999996

In [21]: t[95] + 0.01

Out[21]: 0.96000000000000008

2010年11月27日 星期六 12:30

哦,知了知了

2010年11月27日 星期六 14:30

最后的数据是不会重复出现在两个区间里了,但是0.94被划到 [0.93, 0.94) 还是让我感到很无语啊。。。

2010年11月27日 星期六 16:38

那是因为数据的0.94和区间的0.94有细微的差别,

如果你要调整的话,只好把所有的区间都加上一个很小的偏移量,例如t+=1e-10

偏移区间也不是办法,数据本身是阶梯状的而且正好碰上区间边界,这个恐怕没有好办法。

 

2010年11月27日 星期六 21:43

不过这次只是算一个累计概率,被分在相邻的区间差别应该不大。

看来以后只有争取把原始数据的精度提高了

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号