我不知道为什么下面的两行代码之间存在差异。由于某种原因,Numpy 数组(即"load_values"(在计算中略有偏差?当我将 Numpy 数组索引替换为存储的实际值(在本例中为 1800(时,我得到了正确的答案。此外,我用常规列表替换了 Numpy 数组,它也得到了正确的答案。只有当我使用 Numpy 数组时,我的计算才会稍微偏离。为什么会这样?很明显,我只是没有看到吗?
In [27]: alpha[3] + alpha[2] * 1800 + alpha[1] * (1800 ** 2) + alpha[0] * (1800 ** 3)
Out[27]: 1.2057057142857146
In [28]: alpha[3] + alpha[2] * load_values[2] + alpha[1] * (load_values[2] ** 2) + alpha[0] * (load_values[2] ** 3)
Out [28]: 1.2048772097918872
编辑:这是alpha和load_values:
In[54]: alpha
Out[54]: array([ 4.24382716e-13, -1.18055556e-09, -6.69194444e-04, 1.64000000e-03])
In[55]: load_values
Out[55]: array([ 600, 1200, 1800, 2400, 3000])
如评论中所述,问题的根源是执行操作时溢出:load_values[2] ** 3
。numpy
的默认 int-type 似乎是int32
的,而标准的 pythonint
似乎至少是numpy.int64
等效的。您需要使用int64
来正确计算方程。这可以在这里看到:
# load_values as int32 array (numpy default):
print(type(load_values[2])) # <class 'numpy.int32'>
print(type(1800)) # <class 'int'>
answer_1 = 1800 ** 3
answer_2 = load_values[2] ** 3
print(answer_1) # 5832000000
print(answer_2) # 1537032704
# load_values as int64 array:
load_values = np.array(load_values, dtype=np.int64)
print(type(load_values[2])) # <class 'numpy.int64'>
print(type(1800)) # <class 'int'>
answer_1 = 1800 ** 3
answer_2 = load_values[2] ** 3
print(answer_1) # 5832000000
print(answer_2) # 5832000000
我将把逐点分析留给你。