我收到此错误:'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
答案 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