我想写计算直方图python程序,给予相同的号码清单:奇怪的蟒蛇错误
1
3
2
3
4
5
3.2
4
2
2
所以输入参数是文件名和间隔数。
程序代码是:
#!/usr/bin/env python
import os, sys, re, string, array, math
import numpy
Lista = []
db = sys.argv[1]
db_file = open(db,"r")
ic=0
nintervals= int(sys.argv[2])
while 1:
line = db_file.readline()
if not line:
break
ll=string.split(line)
#print ll[6]
Lista.insert(ic,float(ll[0]))
ic=ic+1
lmin=min(Lista)
print "min= ",lmin
lmax=max(Lista)
print "max= ",lmax
width=666.666
width=(lmax-lmin)/nintervals
print "width= ",width
nelements=len(Lista)
print "nelements= ",nelements
print " "
Histogram = numpy.zeros(shape=(nintervals))
for item in Lista:
#print item
int_number = 1 + int((item-lmin)/width)
print " "
print "item,lmin= ",item,lmin
print "(item-lmin)/width= ",(item-lmin),"/",width," ====== ",(float(item)-float(lmin))/float(width)
print "int((item-lmin)/width)= ",int((item-lmin)/width)
print item , " belongs to interval ", int_number, " which is from ", lmin+width*(int_number-1), " to ",lmin+width*int_number
Histogram[int_number] = Histogram[int_number] + 1
但不知何故,我完全失去了,我得到奇怪的错误,有谁能够help¿
感谢
P.D.这些是输出的结果:
item,lmin= 1.0 1.0
(item-lmin)/width= 0.0/0.666666666667 ====== 0.0
int((item-lmin)/width)= 0
1.0 belongs to interval 1 which is from 1.0 to 1.66666666667
item,lmin= 2.0 1.0
(item-lmin)/width= 1.0/0.666666666667 ====== 1.5
int((item-lmin)/width)= 1
2.0 belongs to interval 2 which is from 1.66666666667 to 2.33333333333
item,lmin= 3.0 1.0
(item-lmin)/width= 2.0/0.666666666667 ====== 3.0
int((item-lmin)/width)= 3
3.0 belongs to interval 4 which is from 3.0 to 3.66666666667
Traceback (most recent call last):
File "from_list_to_histogram.py", line 43, in <module>
Histogram[int_number] = Histogram[int_number] + 1
IndexError: index out of bounds
最重要的错误是:
(项目-lmin工)/宽度= 1.0/0.666666666667 ====== 1.5
和
IndexError:索引超出范围
你会得到什么错误? – Uri 2010-03-16 19:42:29
切勿使用'while 1:f.readline()'。在f:中使用'for line。 – 2010-03-16 20:06:51
请勿使用'string.split'。使用'str' /'unicode'类型的split方法。 – 2010-03-16 20:07:16