运行时mpmath精度| Python

2024-04-26 21:08:17 发布

您现在位置: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倍,我将不胜感激

谢谢大家!! 伊莱