python - 运行时 - 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 倍的人。
谢谢你们!伊莱
解决方案
推荐阅读
- amazon-web-services - 如何在 F# 中访问部分 AWS Lambda 事件?
- sql - 插入表需要来自另一个表的特定条件
- ruby-on-rails - 在 Ruby on Rails 项目中将“关注点”存储在哪里?(轨道 5.2+)
- mitmproxy - 如何用 mitmproxy/mitmdump 替换 JS 文件
- android-studio - 在 AndroidManifest.xml 中使用字符串资源时出现问题
- python - 解析和 strptime 不会在熊猫中转换我的日期
- scala - Scala:从文件中查找字符出现
- mysql - where 语句中不存在别名表
- sed - 使用 Sed 使用带有模式的文件删除多行
- javascript - 使用异步等待 es6 函数在变量上未定义