标签: numexpr

限制在numexpr中的子表达式

如何有效地表达以下内容numexpr

z = min(x-y, 1.0) / (x+y)
Run Code Online (Sandbox Code Playgroud)

在这里,xy具有相同的形状的一些大型NumPy的阵列.

换句话说,我想盖x-y1.0除以之前x+y.

我想使用单个numexpr表达式来做这个(x并且y很大,我不想不止一次迭代它们).

python numpy pytables numexpr

4
推荐指数
1
解决办法
433
查看次数

长尾小鹦鹉与Numba有何不同?因为我没有看到某些NumPy表达式有任何改进

我想知道是否有人知道长尾小鹦鹉和Numba jit之间的一些关键区别?我很好奇,因为我正在比较Numexpr与Numba和长尾小鹦鹉,以及这个特殊的表达式(我希望它在Numexpr上表现得非常好,因为它是文档中提到的那个)

结果是

在此输入图像描述

和我测试的功能(通过timeit - 每个功能最少3次重复和10次循环)

import numpy as np
import numexpr as ne
from numba import jit as numba_jit
from parakeet import jit as para_jit


def numpy_complex_expr(A, B):
    return(A*B-4.1*A > 2.5*B)

def numexpr_complex_expr(A, B):
    return ne.evaluate('A*B-4.1*A > 2.5*B')

@numba_jit
def numba_complex_expr(A, B):
    return A*B-4.1*A > 2.5*B

@para_jit
def parakeet_complex_expr(A, B):
    return A*B-4.1*A > 2.5*B
Run Code Online (Sandbox Code Playgroud)

如果你想仔细检查机器上的结果,我也可以抓住IPython nb.

如果有人想知道Numba是否安装正确......我是这么认为的,它在我以前的基准测试中表现如预期:

在此输入图像描述

python numpy numexpr numba parakeet

4
推荐指数
1
解决办法
1317
查看次数

numba guvectorize target ='parallel'慢于target ='cpu'

我一直在尝试优化一段涉及大型多维数组计算的python代码.我对numba的结果有违反直觉.我正在运行MBP,2015年中期,2.5 GHz i7 quadcore,OS 10.10.5,python 2.7.11.考虑以下:

 import numpy as np
 from numba import jit, vectorize, guvectorize
 import numexpr as ne
 import timeit

 def add_two_2ds_naive(A,B,res):
     for i in range(A.shape[0]):
         for j in range(B.shape[1]):
             res[i,j] = A[i,j]+B[i,j]

 @jit
 def add_two_2ds_jit(A,B,res):
     for i in range(A.shape[0]):
         for j in range(B.shape[1]):
             res[i,j] = A[i,j]+B[i,j]

 @guvectorize(['float64[:,:],float64[:,:],float64[:,:]'],
    '(n,m),(n,m)->(n,m)',target='cpu')
 def add_two_2ds_cpu(A,B,res):
     for i in range(A.shape[0]):
         for j in range(B.shape[1]):
             res[i,j] = A[i,j]+B[i,j]

 @guvectorize(['(float64[:,:],float64[:,:],float64[:,:])'],
    '(n,m),(n,m)->(n,m)',target='parallel')
 def add_two_2ds_parallel(A,B,res):
     for i in range(A.shape[0]):
         for j in range(B.shape[1]):
             res[i,j] = A[i,j]+B[i,j]

 def …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing numexpr numba

4
推荐指数
1
解决办法
2576
查看次数

使用 NumExpr 提升 NumPy 代码的运行时间:分析

由于 NumPy 不使用多核,我正在学习使用 NumExpr 加速 NumPy 代码,因为它对多线程有很好的支持。以下是我正在使用的示例:

# input array to work with
x = np.linspace(-1, 1, 1e7)

# a cubic polynomial expr
cubic_poly = 0.25*x**3 + 0.75*x**2 + 1.5*x - 2

%timeit -n 10 cubic_poly = 0.25*x**3 + 0.75*x**2 + 1.5*x - 2
# 657 ms ± 5.04 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Run Code Online (Sandbox Code Playgroud)

现在,我们可以使用 NumExpr 做同样的事情:

cubic_poly_str = "0.25*x**3 + 0.75*x**2 + 1.5*x - 2"
# set number of threads to …
Run Code Online (Sandbox Code Playgroud)

python numpy polynomial-math multidimensional-array numexpr

4
推荐指数
1
解决办法
1645
查看次数