traits(mixins)给可变映射加+,/,-,*
archer的Python项目详细描述
- 来源:https://github.com/jul/archery
- 门票:https://github.com/jul/archery/issues?state=open
- 最新文档:http://archery.readthedocs.org/en/latest/index.html
什么是射箭?
是在MyabelMeMax上使用的一组MIXIN,具有以下特点:
- 线性代数;
- 类向量度量;
- 可搜索行为;
为方便起见,我们提供了3个混凝土等级:
基本用法
使用从dict派生的ready-to-use类
mdct
dict,始终支持所有线性代数属性
基本上是:任意基向量的dict(递归)。
要了解其使用和实现的更多信息:
示例:
>>> from archery import mdict >>> point = mdict(x=1, y=1, z=1) >>> point2 = mdict(x=1, y=-1) >>> print( (2 * point + point2)/4) >>> # OUT : {'y': 0.25, 'x': 0.75, 'z': 0.5} >>> print(point - point2) >>> # OUT : {'y': 2, 'x': 0, 'z': 1} >>> b=mdict(x=2, z=-1) >>> a=mdict(x=1, y=2.0) >>> a+b >>> # OUT: {'y': 2.0, 'x': 3, 'z': -1} >>> b-a >>> # OUT: {'y': -2.0, 'x': 1, 'z': -1} >>> -(a-b) >>> # OUT: {'y': -2.0, 'x': 1, 'z': -1} >>> a+1 >>> # OUT: {'y': 3.0, 'x': 2} >>> -1-a >>> # OUT: {'y': -3.0, 'x': -2} >>> a*b >>> # OUT: {'x': 2} >>> a/b >>> # OUT: {'x': 0} >>> 1.0*a/b >>> # OUT: {'x': 0.5}
vdict
在欧几里得意义中定义abs(),dot(),cos()的dict
示例:
>>> from archery import vdict as Point >>> >>> u = Point(x=1, y=1) >>> v = Point(x=1, y=0) >>> u.cos(v) >>> 0.7071067811865475 >>> u.dot(v) >>> # OUT: 1 >>> u.cos(2*v) >>> # OUT: 0.7071067811865475 >>> u.dot(2*v) >>> #OUT: 2 >>> abs(u) >>> #OUT: 1.4142135623730951 >>> u3 = Point(x=1, y=1, z=2) >>> u4 = Point(x=1, y=3, z=4) >>> u3 + u4 >>> #OUT: dict(x=2, y=4, z=6) >>> assert u4 + u4 == 2*u4 >>> from archery import vdict >>> from math import acos, pi >>> point = vdict(x=1, y=1, z=1) >>> point2 = vdict(x=1, y=-1) >>> point2 = mdict(x=1, y=-1) >>> print( (2 * point + point2)/4) >>> # OUT : {'y': 0.25, 'x': 0.75, 'z': 0.5} >>> print(acos(vdict(x=1,y=0).cos(vdict(x=1, y=1)))*360/2/pi) >>> # OUT : 45.0 >>> print(abs(vdict(x=1, y=1))) >>> # OUT : 1.41421356237 >>> print(vdict(x=1,y=0,z=3).dot(vdict(x=1, y=1, z=-1))) >>> #OUT -2
SDICT
dict用于搜索值/键/path并具有特殊兴趣。
基本上,它以元组的形式返回一个迭代器,它包含所有键和值。 这是一个巧妙的技巧,如果您将它与make_from_path结合使用,它将帮助您在dict中准确地选择所需内容:
>>> from archery import sdict, make_from_path >>> tree = sdict( ... a = 1, ... b = dict( ... c = 3.0, ... d = dict(e=True) ... ), ... point = dict( x=1, y=1, z=0), ... ) >>> list(tree.leaf_search(lambda x: type(x) is float )) >>> #Out: [3.0] >>> res = list(tree.search(lambda x: ("point") in x )) >>> ## equivalent to list(tree.search(lambda x: Path(x).contains("point"))) >>> print(res) >>> #Out: [('point', 'y', 1), ('point', 'x', 1), ('point', 'z', 0)] >>> make_from_path(dict(), res) >>> # {('point', 'y', 1): {('point', 'x', 1): ('point', 'z', 0)}}
高级用法
这个库证明了混合函数在{a13}上的一致用法给出了基本用法中所看到的属性。
< Pixin不需要任何具体的实现,^ {STR 1 } $ < <强> >如果我正确地完成了我的工作。 任何类型的mutablemapping。下面是collections.counter上开箱即用的余弦相似性示例
您还可以继承linearalgebrae>>> from collections import Counter
>>> from archery import VectorDict
>>> class CWCos(VectorDict, Counter):
... pass
>>>
>>> CWCos(["mot", "wut", "wut", "bla"]).cos(CWCos(["mot","wut", "bla"]))
>>> # OUT: 0.942809041582