计算的 numpy 数组问题,int 类型,int32 与 int64



我不知道为什么下面的两行代码之间存在差异。由于某种原因,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] ** 3numpy的默认 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

我将把逐点分析留给你。

相关内容

最新更新