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 © 2024
京ICP备05028076号