2015-12-16 40 views
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,也不应该每个值你是假的。

我只是无法找到我出问题的地方,为什么我总是得到零的数组。

+0

你的圆括号在这里是不平衡的:'dummy = np.zeros((len(l),1)' – khelwood

+0

是的,我看到了,但那不是问题,否则它会是一个简单的语法错误。我只是想出了什么问题,但它让我更加困惑。出于某种原因,python告诉我1/52是0,所以我改变了1/52到((52)**( - 1))和现在它的工作原理... – gormar

+2

你使用什么版本的python?在python 2.x中“1/52”确实是0,因为默认是整数除法,所以你应该使它成为“1.0/52”来强制浮点运算,在Python 3.x这是自动 –

回答

3

在Python 2中(大多数人仍在使用),1/52是一个整数除法,因此返回0。 1.0/52

在Python 3中,这不再是真实的 - 分割两个整数可以返回一个浮点数。