np.sum将值舍入到最接近的整数(不需要)

时间:2015-04-10 00:42:07

标签: python-3.x numpy sum

(某些代码已被删除,例如绘制代码,但不会影响问题)

正如标题所述,我在Numpy的和函数中遇到问题四舍五入到最接近的整数。

在下面的代码中,我使用np.sum创建变量chisqrR,它按预期工作,给出我的值1.23727 ....在代码的底部附近,我几乎有完全相同的代码我需要的地方为' chisqr'找到一堆价值观。基于一系列输入值。感兴趣的三条线是:

chisqr[i] = np.sum(((counts - fit_exp_nonlin(t, popt[0], mu[i], popt[2]))/yerr)**2)
print(((counts - fit_exp_nonlin(t, popt[0], mu[i], popt[2]))/yerr)**2)
print(chisqr[i])

第一个'打印'没有np.sum命令的行给出了一堆值(所有这些都是长小数),但是,一旦它们被np.sum求和,我总是得到精确的整数,这绝对不可能。例如,在它之前的一个数组是:

[ 0.2251407   0.25516322  0.90413181  1.08316468  7.40191331  0.00893473
1.94594874  0.24967999  2.58848903  1.39550592  0.06140513]

和'总和'它给出的数组是:

16

然而,如果我手动汇总值,我会得到

16.11947726

同样,完整的代码如下:

# Imports
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import pylab

def main():
    counts = np.array([0.72, 0.74, 0.82, 0.86, 1.18, 0.84, 1.14, 0.96, 1.44, 1.64, 1.76])
    t = np.array([108.5, 99.0, 90.0, 81.0, 71.0, 58.0, 45.0, 35.5, 26.0, 13.0, 0])/10

    xx = np.array(np.linspace(-1,max(t)+max(t)*0.1,500))
    guess1 = 1.1914367
    guess2 = 0.19740375
    guess3 = 0.61534327
    guess = (guess1, guess2, guess3)
    popt, pcov = curve_fit(fit_exp_nonlin, t, counts, guess, maxfev=1000)    
    chisqrR = (np.sum(((counts - fit_exp_nonlin(t, *popt))/yerr)**2))/(len(t)-4)
    pylab.xlim([-1,12])
    print(chisqrR)

    mu = np.array(np.linspace(popt[1] - .1,popt[1] + .1,100))
    chisqr = np.array([0] * len(mu))
    for i in range(len(mu)):
        chisqr[i] = np.sum(((counts - fit_exp_nonlin(t, popt[0], mu[i], popt[2]))/yerr)**2)
        print(((counts - fit_exp_nonlin(t, popt[0], mu[i], popt[2]))/yerr)**2)
        print(chisqr[i])

def fit_exp_nonlin(t, a, b, c):
    return a*np.exp(-b*t) + c

if __name__ == '__main__':
    main()

这已经困扰了我很长一段时间了,我似乎无法弄明白,任何帮助都会非常感激。

谢谢。

1 个答案:

答案 0 :(得分:1)

正如Norbert van Nobelen在评论中所述,这是通过改变

来解决的
chisqr = np.array([0] * len(mu))

chisqr = np.array([0] * len(mu), dtype='f')

谢谢诺伯特!