python 报错'float' object has no attribute '__getitem__' 请问是什么问题 怎么修改

如题,我的程序中的一段是这样的:
h=0
for i, x in enumerate(c):
for j, y in enumerate(cvar):
g=finalresult[h]*1
Z[i][j] = g #/1e6
h+=1
这个: Z[i][j] = g地方总是报错'float' object has no attribute '__getitem__' 。 finalresult的数据类型是python原有的那种。numpy.float64
本来的问题是:c和cvar是并不等长的变量finalresult是如下得来,相当于,每个c和cvar排列组合得来的。想用c和cvar做x和y的坐标轴,画出3d finalresult的曲面。但是由于c和cvar不是等长,遇到了一些问题。
finalresult=[]
for i in range(0,9,+1):
for j in range(0,25,+1):
alphaValue = c[i]*(c[i]*(1-c[i])/cvar[j]-1)
betaValue = (1-c[i])*(c[i]*(1-c[i])/cvar[j]-1)
print c[i], cvar[j]
print alphaValue, betaValue
Sl_s=0

for k in range(1,51,+1):
betaPrimitive=[]
denominator=special.beta(alphaValue,betaValue)*alphaValue
for l in range(0,51,+1):
r=hyp2f1(alphaValue, 1-betaValue, 1+alphaValue, f_[l])*f_[l]**alphaValue/denominator
r_f=float(r)
betaPrimitive.append(r_f)

result = (betaPrimitive[k-1]*Phi_[k-1]+betaPrimitive[k]*Phi_[k])*0.5*(f_[k-1]-f_[k])
Sl_s += result
#print Sl_s

result_1 = (Sl_[0]-Sl_s)
#Alternativ: result_1 = Sl_[0]+np.trapz(betaPrimitive*Phi_,f_)
finalresult.append(result_1)

应该是误将float当作list或者tuple来操作了
对于list或者元组,[]操作是访问下标所在的元素,也就是__getitem__方法。
由于python定义变量的时候并不说明类型,类型都在运行时确定,因此有出现类型错误的可能性。
至于具体怎么修改,无法从你的问题中得出结论,你可以看出错的调用堆栈,都有对应的文件和行号的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-16
同上,你代码里z[i] 或z 是个浮点数
第2个回答  推荐于2016-06-01
我觉得应该是Z是float,无getitem属性。本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网