Snuggs是Numpy的s表达式
项目描述
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 查看哈希值)