Python 返回全零的平方计算

Python 返回全零的平方计算,python,Python,编辑:经过更多的尝试和错误,我发现出于某种原因,python说1/52是0,有人能解释为什么吗,这样我以后就可以避免这个问题了 我已经为一个剧本挣扎了一段时间,主要是因为我或我的同学根本无法找出它的毛病 为了保持简单,我们有数据和模型,我们必须将一些数据点重新缩放到模型,然后进行chi2square最小化,以找到最佳的重新缩放因子 我已经试过多种方法了。我试着把所有的东西都放在一个循环中,当那不起作用的时候,我试着把循环分开,等等 我的代码的相关部分如下所示: #Here I pick the

编辑:经过更多的尝试和错误,我发现出于某种原因,python说1/52是0,有人能解释为什么吗,这样我以后就可以避免这个问题了

我已经为一个剧本挣扎了一段时间,主要是因为我或我的同学根本无法找出它的毛病

为了保持简单,我们有数据和模型,我们必须将一些数据点重新缩放到模型,然后进行chi2square最小化,以找到最佳的重新缩放因子

我已经试过多种方法了。我试着把所有的东西都放在一个循环中,当那不起作用的时候,我试着把循环分开,等等

我的代码的相关部分如下所示:

#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)
#这里我选择与数据对应的模型值
y4=np.零((len(l),1))
对于范围(0,len(l))内的x:
如果l[x]<2.16:
对于范围(0,len(lmodel))中的y:
如果l模型[y]==l[x]:
y4[x]=y2[y]
elif l模型[y]
不管我怎么做,由于某种原因,我的虚拟数组总是全零,使得每个卡方值都为0

我试着把“dummy”做成一个矩阵,然后求和,我试着打印单独的值来计算dummy[t],其中一些值是0(正如预期的那样),一些不是,所以从逻辑上讲,如果单独的值不都是0,dummy中的每个值也不应该都是0

我就是找不到哪里出错,也找不到为什么我总是得到零数组。

在大多数人仍在使用的Python 2中,
1/52
是一个整数除法,所以返回0。您可以通过显式使用浮点数来修复它,例如
1.0/52


在Python3中,这不再是真的——两个整数相除会返回一个浮点。

这里的括号是不平衡的:
dummy=np.zeros((len(l),1)
是的,我看到了,但这不是问题所在,否则这将是一个简单的语法错误。我刚刚找出了问题的原因,但它让我更加困惑。出于某种原因,python告诉我1/52是0,所以我将1/52改为((52)**(-1)),现在它可以工作了……您使用的python版本是什么?在python 2.x“1/52”中实际上是0,因为默认值是整数除法,所以应该将其设置为“1.0/52”为了强制执行浮点操作,在python 3.x中,这是automaticI use 2.7,因为它在我的领域中最常用。虽然我不知道这一点,但这是一个奇怪的特性,尤其令人沮丧,因为我花了数小时编写和重写我的循环,因为我不知道我做错了什么。我的第一次尝试(这比我上面写的要优雅得多)当时可能也是正确的。至少我发现了这个问题……是的,这是python的一个奇怪的怪癖,如果你不想重写你的代码,你可以把来自未来导入部分的
放在你文件的顶部,它的行为就像python 3.x一样