snuggs是numpy的s表达式
snuggs的Python项目详细描述
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中的新功能是高阶函数map和partial。
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])