首页 > 解决方案 > 运行时 - mpmath 精度 | Python

问题描述

我正在使用 mpmath 库,并且有兴趣检查提高精度对计算/执行时间的影响。我遇到了一个我找不到解释的奇怪现象。当我检查逐项乘法的时间时,我得到精度 16 (mp.dps = 16) 和精度 1024 (mp.dps = 1024) 的相同执行时间。但是,当我检查特征值计算的时间时,我发现时间上有显着差异。计时之间的比率约为 7 (time_eig_1024prec/time_eig_16prec = 7)。使用 5k 长和 100k 长的复数向量(用于逐项乘法)和 16x16 矩阵执行特征值的操作。我的代码:

mp.dps = 16; 
#mp.dps = 1024; 
mp.pretty = False
AVG = 10
#element-wise vector multiplication
N=100000
times = np.zeros((1,AVG))
for i in range(AVG):
    r1 = 10*np.random.rand(1,N)
    i1 = 10*np.random.rand(1,N)
    c1 = np.vectorize(mpc)(np.vectorize(complex)(r1,i1))
    r2 = 10*np.random.rand(1,N)
    i2 = 10*np.random.rand(1,N)
    c2 = np.vectorize(mpc)(np.vectorize(complex)(r2,i2))
    start_time = time.time()
    prod = np.vectorize(fmul)(c1,c2)
    times[0,i] = time.time() - start_time
print("--- %s seconds | element-wise vector multiplication ---" % numpy.mean(times))

#calculating Eigenvalues
M = 16
times = np.zeros((1,AVG))
for i in range(AVG):
    mat = 10*np.random.rand(M,M)
    A = mp.matrix(mat)
    start_time = time.time()
    e = numpy.array(mp.eig(A)[0])
    times[0,i] = time.time() - start_time
print("--- %s seconds | eig ---" % numpy.mean(times))

我将非常感谢任何可以向我解释为什么增加精度不会影响逐项乘法运算的时间,而是乘以特征值计算执行时间的 7 倍的人。

谢谢你们!伊莱

标签: pythonmpmath

解决方案


推荐阅读