snuggs是numpy的s表达式

snuggs的Python项目详细描述


https://travis-ci.org/mapbox/snuggs.svg?branch=masterhttps://coveralls.io/repos/mapbox/snuggs/badge.svg

snuggs是numpy的s表达式

>>>snuggs.eval("(+ (asarray 1 1) (asarray 2 2))")array([3,3])

语法

snuggs用以下语法将numpy包装在表达式中:

expression = "(" (operator | function) *arg ")"
arg = expression | name | number | string

示例

两个数相加

importsnuggssnuggs.eval('(+ 1 2)')# 3

数与数组的乘法

可以使用asarray创建数组。

snuggs.eval("(* 3.5 (asarray 1 1))")# array([ 3.5,  3.5])

评估背景

表达式也可以按名称引用本地上下文中的数组。

snuggs.eval("(+ (asarray 1 1) b)",b=np.array([2,2]))# array([3, 3])

可以使用关键字参数(例如, b=np.array([2, 2]),或者通过传递存储 键和关联的数组值。通过字典,特别是 当使用的函数或运算符 引用提供值的顺序。例如, read函数将查找传递的i-th值:

ctx=OrderedDict((('a',np.array([5,5])),('b',np.array([2,2]))))snuggs.eval("(- (read 1) (read 2))",ctx)# array([3, 3])

函数和运算符

算术(* + / -)和逻辑(< <= == != >= > & |)运算符是 可用。numpy模块的成员,例如asarray()mean(), 还有where()也可以使用。

snuggs.eval("(mean (asarray 1 2 4))")# 2.3333333333333335
snuggs.eval("(where (& tt tf) 1 0)",tt=numpy.array([True,True]),tf=numpy.array([True,False]))# array([1, 0])

高阶函数

snuggs 1.1中的新功能是高阶函数mappartial

snuggs.eval("((partial * 2) 2)")# 4snuggs.eval('(asarray (map (partial * 2) (asarray 1 2 3)))')# array([2, 4, 6])

性能说明

snuggs使简单的计算器程序成为可能。没有任何优化 例如numexpr(多线程, 临时数据的消除等)目前可用。

如果您希望将numpy与更完整的lisp结合起来,请参见 Hy

=>(import numpy)=>(* 2(.asarraynumpy[123]))array([2, 4, 6])

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

推荐PyPI第三方库


热门话题
java使用唯一的按钮标签单击按钮   代码生成如何使用Java codeModel为数组的特定索引赋值   java如何批量执行Camel SQL插入   java iText 7将ltv添加到现有签名   内存管理Java应用程序突然停止几天后(810)   带MySQL的java注册表单JavaFX在intellij中失败   如何使用eclipse为windows azure java项目启用远程调试   一种通用的java输入输出设计模式   java Android XML(RSS)忽略引号(“”)   java帮助:安卓中的8 X 10 2维按钮数组   java启动Android项目   JWrapper构建java应用程序   java如何在Android应用程序中设置基于日期/时间的默认页面加载?   java循环程序在完成后返回到起点   java Hibernate:更好的整体类还是多类映射?   回溯数独解算器的递归问题[Java]   java查找类用法   java如何在SpringWebFlow中将多个模型绑定到一个视图?