- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我第一次尝试将 JIT 用于 python,这是我想要加速的用例。我读了一些关于 numba 的文章,它看起来很简单,但下面的代码没有提供任何加速。请原谅我可能犯的任何明显错误。
我也尝试按照 cython 的基本教程的建议进行操作,但同样没有时间差异。 http://docs.cython.org/src/tutorial/cython_tutorial.html
我猜我必须做一些像声明变量这样的事情?使用其他库?只对所有内容使用 for 循环?如果我能引用任何指导或示例,我将不胜感激。
例如我从之前的问题中知道Elementwise operations in mpmath slow compared to numpy and its solution使用 gmpy 而不是 mpmath 明显更快。
import numpy as np
from scipy.special import eval_genlaguerre
from sympy import mpmath as mp
from sympy.mpmath import laguerre as genlag2
import collections
from numba import jit
import time
def len2(x):
return len(x) if isinstance(x, collections.Sized) else 1
@jit # <-- removing this doesn't change the output time if anything it's slower with this
def laguerre(a, b, x):
fun = np.vectorize(genlag2)
return fun(a, b, x)
def f1( a, b, c ):
t = time.time()
M = np.ones( [ len2(a), len2(b), len2(c) ] )
A, B, C = np.meshgrid( a, b, c, indexing = 'ij' )
temp = laguerre(A, B, C)
M *= temp
print 'part1: ', time.time() - t
t = time.time()
A, B = np.meshgrid( a, b, indexing= 'ij' )
temp = np.array( [[ mp.fac(x1)/mp.fac(y1) for x1,y1 in zip(x2,y2)] for x2,y2 in zip(A, B)] )
temp = np.reshape( temp, [ len(a), len(b), 1 ] )
temp = np.repeat( temp, len(c), axis = 2 )
print 'part2 so far:', time.time() - t
M *= temp
print 'part2 finally', time.time() - t
t = time.time()
a = mp.arange( 30 )
b = mp.arange( 10 )
c = mp.linspace( 0, 100, 100 )
M = f1( a, b, c)
最佳答案
最好将 numba 与带有自定义装饰器的 vectorize 一起使用,如果没有定义惰性操作将执行,这可能会导致进程变慢。在我看来,Jit 比 vectorize 慢。
关于python - 如何在 python 中有效地使用 JIT 和 mpmath/gmpy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26565579/
我安装了 anaconda 和许多 python 库,在这些 mpmath 之间。当我尝试运行 powerlaw 包时,出现以下错误: -> 1466 from mpmath impo
我正在使用 mpmath python 库在某些计算期间获得精度,但我需要将结果转换为 numpy native 类型。 更准确地说,我需要在 numpy.ndarray(包含浮点类型)中转换一个 m
当在 python 和 mpmath 中时,一个人的代码以 from mpmath import mp mp.dps =200 我的问题是 - 取决于一个人的硬件 - 是否存在 mp.dps 的上限以
我正在用 python 编写一些代码,这些代码需要频繁反转大方矩阵(100-200 行/列)。 我正在达到机器精度的极限,所以我开始尝试使用 mpmath 进行任意精度矩阵求逆,但它非常慢,即使使用
我遇到了一种称为 Chudnovsky 算法 的 π 算法。 Wikipedia 上显示了 Python 实现它使用 Python 自带的 decimal 包。但是最近在测试Gauss Legendr
我希望按元素执行 mpmath对 Python 数组的操作。例如, import mpmath as mpm x = mpm.arange(0,4) y = mpm.sin(x) # e
我要求简要说明,指出所涉及的各种加速方法。这只是出于好奇。 例如 mpmath website告诉指数函数公式用于复平面中的运算,但现在我想将其保留为用于纯实数的运算。 或者,最好有一个指向在 mpm
我正在集成一些非常讨厌的函数,而 scipy.integrate.quad 不能很好地处理这种情况。我计划将 mpmath.quad 与 tanh-sinh 方法一起使用,但我需要将一些参数传递给正在
我在我的 Python 程序中使用 numpy 和 mpmath。我使用 numpy,因为它允许轻松访问许多线性代数运算。但是因为 numpy 的线性方程求解器不是那么精确,所以我使用 mpmath
我正在尝试使用 mpmath.polyroots求具有整数系数 x*(x-4)**3 的简单多项式的根,展开后其系数向量为 [1, -12, 48, 64, 0]。以下代码失败: import mpm
mpmath声称支持“任意精度浮点运算”。 然而。 。 . >>> import mpmath >>> 1 + mpmath.erf(-5.921) mpf('1.1102230246251565e-
我有一些涉及阶乘的计算,它们的爆炸速度非常快,因此我决定使用任意精度库 mpmath。 我的代码如下所示: import numpy as np import mpmath as mp import
我目前正在查看 Meijerg 的 mpmath 文档。它说 mpmath.meijerg(a_s, b_s, z, r=1, **kwargs) Evaluates the Meijer G-fun
我想从 C 代码访问 mpmath 的特殊函数。我知道如何通过中间 python 脚本来做到这一点。例如,为了计算超几何函数,C 程序: #include void main (int argc,
当使用两个 1F1 函数之和时,Tricomi 合流超几何函数的计算可能会出现病态,因为它们的大小可能几乎相等,但符号相反。 mpmath 函数“hyperu”在内部使用任意精度,并在默认模式下生成具
我正在使用 python 库 mpmath,特别是评估不完整的 Gamma 函数。这是求根例程的一部分,但对于复值参数的某些组合,其计算速度极慢。 import mpmath as mp from m
我想使用“DE HOOG”算法进行数值拉普拉斯逆变换。我想使用“mpmath”包,我从链接安装了它: https://github.com/klkuhlm/mpmath 假设我需要在 t=1 处找到以
当我尝试在 mpmath 函数中使用 numpy 数组时出现错误,此示例在到达该行时失败: C = (f*L/D) + 2*mp.log(P1/P2) 其中 P1 是一个数组。出现错误: cannot
我正在尝试使用 mpmath.findroot 的多维牛顿法以数值方式高精度求解方程组。这是一个示例系统: def f(x_0, x_1, x_2, x_3, x_4, x_5, y_0, y_1,
我想将 mpmath 函数转换为可以在 numpy 数组上运行的函数。假设我有以下示例 A=np.linspace(0,1,100) besseli_vec = numpy.frompyfunc(mp
我是一名优秀的程序员,十分优秀!