跳转到主要内容

Snuggs是Numpy的s表达式

项目描述

https://travis-ci.org/mapbox/snuggs.svg?branch=master https://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

示例

两个数字的加法

import snuggs
snuggs.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]))提供,或者通过传递一个存储键和相关数组值的字典。传递字典,特别是OrderedDict,在使用引用提供值顺序的函数或运算符时很重要。例如,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中引入了高阶函数map和partial。

snuggs.eval("((partial * 2) 2)")
# 4

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

性能说明

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

如果您想将Numpy与更完整的Lisp结合使用,请参阅Hy

=> (import numpy)
=> (* 2 (.asarray numpy [1 2 3]))
array([2, 4, 6])

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分布

snuggs-1.4.7.tar.gz (8.2 kB 查看哈希值)

上传时间

构建分布

snuggs-1.4.7-py3-none-any.whl (5.4 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面