【发布时间】:2018-11-04 06:09:27
【问题描述】:
考虑以下 Python 代码,它在 Python 中对复数执行一些简单的算术运算:
import numpy as np
s = 2
l = 5
v = np.array([np.exp(1j*2*np.pi/l)])
A = pow(s*v, l) + s*v
#Print the precision of np.complex128
print np.finfo(np.complex128).precision
#Export using 20 decimal places for real and imaginary parts
np.savetxt('A.csv', A, fmt=['%.20e%+.20ej'], delimiter=',')
我看到这个answer是为了在Python中打印np.complex128变量的精度,我得到的是15。当我在Spyder中检查A的值时,我看到(32.61803398874989+1.9021130325903035j)的虚部超过15 位小数。此外,导出的 CSV 文件的值为 3.26180339887498931262e+01+1.90211303259030350965e+00j
其实部和虚部都有 20 个有用的位小数。
我在这里感到困惑:如果精度为 15,那么那些额外的小数位是多少?根据here,np.complex128 由两个 64 位浮点数组成,一个用于实部,一个用于虚部。
但我的主要问题是,我在程序中对复数(如加法、乘法和矩阵求逆)进行了许多此类操作,每次运行时都会得到不同的结果,有时正确,有时错误。看来我的程序对这些操作的准确性非常敏感。 Python 中如何量化复数的精度以及我可以拥有的最大值是多少?
我正在使用 Python 2.7.14 和 Numpy 1.14.3。
【问题讨论】:
-
您是如何“检查 Spyder 中 A 的值”的?有很多方法可以做到这一点。
-
@RoryDaulton 我刚刚使用了变量资源管理器并双击了变量。
标签: python numpy math precision complex-numbers