1
编辑:更多的试验和错误后,我想出了,由于某种原因,python说,1/52是0,任何人都可以解释为什么,所以我可以避免在将来这个问题?ChiSquare计算返回全零
我一直在努力处理一段时间的脚本,主要是因为我或我的同学根本找不到它出了什么问题。
为了使事情简单化,我们获得了数据和模型,并且我们必须将一些数据点重新调整为模型,然后执行chi2square最小化以找到最佳重新缩放因子。
我已经尝试了多件事。试图把一切都在1个循环,当没有工作,我试图分裂环达等
我的代码的相关部分看起来是这样的:
#Here I pick the values of the model that correspond to the data
y4 = np.zeros((len(l),1))
for x in range(0,len(l)):
if l[x] < 2.16:
for y in range(0,len(lmodel)):
if lmodel[y] == l[x]:
y4[x] = y2[y]
elif lmodel[y] < l[x] < lmodel[y+1]:
y4[x] = (y2[y] + y2[y+1])/2
else:
y4[x] = y1[x]
#Do Chi2 calculation
#First, I make a matrix with all the possible rescaled values
chi2 = np.zeros((200,1))
y3 = np.zeros((len(l),len(chi2)))
for z in range(0,len(chi2)):
for x in range(0,len(l)):
if l[x] < 2.16:
y3[x,z] = y1[x]*10**(0.4*Al[x]*z/100)
else:
y3[x,z] = y1[x]
#Here I calculate the chisquare for each individual column and put it in the chi2 array
dummy = np.zeros((len(l),1))
for x in range(0,len(chi2)):
for t in range(0, len(l)):
dummy[t] = (1/52)*((y3[t,x] - y4[t])/fle[t])**2
chi2[x] = np.sum(dummy)
的事情是,不管是什么我尝试,出于某种原因,我的虚拟阵列总是全零,使每一个卡方值为0.
我试图制作'虚拟'矩阵和事后总结,我已经尝试打印单个值为计算虚拟[t]的,其中一些是0(如预期),有些不是,如此逻辑上,如果个别值不是全部为0,也不应该每个值你是假的。
我只是无法找到我出问题的地方,为什么我总是得到零的数组。
你的圆括号在这里是不平衡的:'dummy = np.zeros((len(l),1)' – khelwood
是的,我看到了,但那不是问题,否则它会是一个简单的语法错误。我只是想出了什么问题,但它让我更加困惑。出于某种原因,python告诉我1/52是0,所以我改变了1/52到((52)**( - 1))和现在它的工作原理... – gormar
你使用什么版本的python?在python 2.x中“1/52”确实是0,因为默认是整数除法,所以你应该使它成为“1.0/52”来强制浮点运算,在Python 3.x这是自动 –