在函数中使用非整数值

时间:2013-12-10 20:14:00

标签: python function integer typeerror

我收到此错误:'TypeError: list indices must be integers, not float'
但我正在使用的函数需要接受非整数值,否则我的结果是不同的...
为了给你一个想法,我已经编写了一些适合高斯的代码,只有一个峰值。为此,我需要计算sigma的估计值。为了得到这个,我写了两个用于查看数据的函数,使用峰值的x值找到两个点(r_pos和l_pos),它们是峰值的一侧和距离y轴的设定距离(THRESH)。从中我可以得到一个估计的西格玛(r_pos - l_pos) 这一切都来自于一段有效的代码,但我的课程标记表示我需要使用函数,所以我试图将其转为:

I0 = max(y)
pos = y.index(I0) 
print 'Peak value is',I0,'Counts per sec at' ,x[pos], 'degrees(2theta)'
print pos,I0
#left position
thresh = 10
i = pos
while y[i] > thresh:
    i -= 1
l_pos = x[i]
#right position
thresh = 10
i = y.index(I0)
while y[i] > thresh:
    i += 1
r_pos = x[i]
print r_pos
sigma0 = r_pos - l_pos
print sigma0

使用可以调用的函数等。这是我的尝试:

def Peak_Find(x,y):
    I0 = max(y)
    pos = y.index(I0)
    return I0, x[pos]

def R_Pos(thresh,position):
    i = position    
    while y[i] > thresh:
        i += 0.1
    r_pos = x[i]
    return r_pos

peak_y,peak_x = Peak_Find(x,y)
Right Position = R_Pos(10,peak_x)

peak_y = 855.0 顺便说一下,Peak_x = 32.1

1 个答案:

答案 0 :(得分:0)

看起来您想要替换

i = position 

类似

i = x.index(position)

因为position是一个浮点数,并且您希望数组中的位置为position。您正在使用i获取数组的索引,并且必须使用int来执行此操作,因此使用.index方法返回(整数)数组中的位置。


你最好以这种方式编写程序,因为变量名实际上会匹配变量中的内容。

def Peak_Find(x,y):
    I0 = max(y)
    pos = y.index(I0)
    return I0, pos

def R_Pos(thresh,position):
    while y[position] > thresh:
        position += 1 # Not sure if this is what you want
    r_pos = x[position]
    return r_pos # Not sure what you want here... this is the value at x, not the position