数字python的运行时编译器。

parakeet的Python项目详细描述


鹦鹉

Parakeet是面向数组的 Python。如果你在python中做大量的数字运算,长尾鹦鹉 可能会显著加快代码的速度。

要加速函数,请用鹦鹉螺的@jit装饰符将其包装起来:

import numpy as np
from parakeet import jit

x = np.array([1,2,3])
y = np.tanh(x * alpha) + beta

@jit
def fast(x, alpha = 0.5, beta = 0.3):
  return np.tanh(x * alpha) + beta

@jit
def loopy(x, alpha = 0.5, beta = 0.3):
  y = np.empty_like(x, dtype = float)
  for i in xrange(len(x)):
    y[i] = np.tanh(x[i] * alpha) + beta
  return y

@jit
def comprehension(x, alpha = 0.5, beta = 0.3):
  return np.array([np.tanh(xi*alpha) + beta for xi in x])

assert np.allclose(fast(x), y)
assert np.allclose(loopy(x), y)
assert np.allclose(comprehension(x), y)

安装

通过运行:

pip install parakeet

依赖关系

Parakeet是为Python2.7(抱歉的Internet)编写的,它依赖于:

默认后端(使用openmp)需要gcc4.4+。

windows:如果安装了32位windows,编译器应该 来自CygwinMinGW。让鹦鹉在64位上工作 windows是非常重要的,似乎需要colossal hacks

mac os x:默认情况下,您的计算机可能只有 clang或过时的gcc版本。你 可以使用 HomeBrew

如果你想使用cuda后端,你需要一个nvidia图形 卡上并安装CUDA ToolkitPyCUDA

它是如何工作的?

非类型化函数用作多个类型的模板 生成专门化(对于每个不同的输入类型集)。 这些类型化的函数在之前经过了许多优化 最后被翻译成本地代码。

更多信息

支持的语言功能

parakeet不能加速任意python代码,它只支持 语言的有限子集:

  • 标量运算(即x + 3 * y
  • 控制流(if语句、循环等)
  • 嵌套函数和lambda
  • 元组
  • 切片
  • numpy数组表达式(即x[1:, :] + 2 * y[:-1, ::2]
  • 一些numpy库函数,比如np.onesnp.sin(看看 这个 mappings 完整列表的模块)
  • 列表文本(解释为数组构造)
  • 列表理解(解释为数组理解)
  • 长尾鹦鹉的高阶数组操作,如parakeet.imapparakeet.scan,和parakeet.allpairs

后端

parakeet目前支持编译到sequential c,multi-core c 使用openmp(默认)或llvm(已弃用)。在这些之间切换 选项将parakeet.config.backend更改为以下选项之一:

  • “openmp”:使用gcc编译,并行运算符跨多个 核心(默认)
  • “c”:将所有并行运算符降低为循环,编译顺序运算符 使用gcc编码
  • “cuda”:在gpu上启动并行操作(实验性)
  • “llvm”:旧的后端已经落后,有些程序可能没有 工作
  • “interp”:用于调试优化的纯python intepreter, 如果您认为cpython对于您的 品味

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
为什么sonar认为这个表达式总是错误的   java为什么PrintWriter不能工作?   java将数组从php发送到安卓 studio   java在静态方法中调用非静态方法   java何时使用Swingutiles。invokeAndWait/invokeLater   java jdbc:embeddeddatabase引发HsqlException   java度量Hyperledger结构项目的性能   java将字符串转换为Blob   java如何将文本添加到文本区域而不是替换它   java如何对100GB的字符串进行排序   发生异常错误::java。lang.OutOfMemoryError:Java堆空间   安卓 studio java。lang.NoClassDefFoundError:org。slf4j。帮手。消息格式化程序   当从命令promt运行时,java maven不是运行主类   用于翻转其余端点的功能的java注释   Oracle函数中的java默认值   java如何访问maven。建筑Quarkus中用于资源筛选的时间戳   java如何在一个JText区域中显示大量值JTable选定行   如何在java中用约束注释web服务参数?   java为了获得流信息,我们应该向userFriendlySelector函数传递哪些参数   java Google GSON嵌套哈希映射反序列化