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

Numpy Array Problem with Calculation, int type, int32 vs int64

我不知道为什么下面两行代码有出入。 Numpy 数组(即 "load_values")由于某种原因在计算中略有偏差?当我用存储的实际值(在本例中为 1800)替换 Numpy 数组索引时,我得到了正确的答案。另外,我用常规列表替换了 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 类型似乎是 int32 而标准 python int 似乎至少是 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

我会逐位分析给你。