python引入jit_如何将python中的JIT与mpmath/gmpy有效地结合使用?

本文探讨了如何在Python中使用JIT(Just-In-Time编译)技术来加速计算,特别是在结合mpmath和gmpy库处理复杂数学运算的场景下。通过示例代码展示了在numpy、scipy和sympy等库上应用numba的jit,并分析了在多维数组操作中的性能优化问题。
摘要由CSDN通过智能技术生成

这是我第一次尝试在python中使用JIT,这是我想要加速的用例。我读了一些关于numba的文章,它看起来很简单,但是下面的代码没有提供任何加速。请原谅我可能犯的任何明显的错误。在

我猜我得做些像声明变量之类的事情?使用其他库?只为所有事情使用for循环?如能提供任何指导或例子,我将不胜感激。在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 #

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值