traits(mixins)给可变映射加+,/,-,*

archer的Python项目详细描述


https://travis-ci.org/jul/archery.svg?branch=masterhttps://badge.fury.io/py/archery.svghttps://codecov.io/gh/jul/archery/branch/master/graph/badge.svgDocumentation Statushttps://img.shields.io/badge/py2.7|3.3|3.4|3.5|3.6|3.7-ok-brightgreen.svg

什么是射箭?

是在MyabelMeMax上使用的一组MIXIN,具有以下特点:

  • 线性代数;
  • 类向量度量;
  • 可搜索行为;

为方便起见,我们提供了3个混凝土等级:

  • mdict(遵循基于dict的线性代数规则的dict);
  • vdict(含有cos,abs,dot积的dict);
  • sdict(易于搜索的dict);

基本用法

使用从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上开箱即用的余弦相似性示例

>>> 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

您还可以继承linearalgebrae

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

推荐PyPI第三方库


热门话题
java将txt文件读入ObjectList   java如何在jQuery中用JSON数据作为ajax响应填充dropdownlist   javaant和jar目录结构   使用Gou Hall算法的java骨架化不起作用   当输入的editText超过10位时,java应用程序停止   无法反序列化'java'的实例。节点中的lang.String`。js服务器到卡夫卡连接   java检查xml标记是否包含注释   格式化文本的Java方法?   java我希望对整个文件有效地应用正则表达式   如何从PDF文件中删除所有图像/图形,并仅在Java中保留文本?   如何在java中使用Linux mincore()   java将Long/ULong转换为带填充零的无符号十六进制字符串   Java Spring SAML无法向IDP发送正确的请求(我的SP在负载平衡器后面)   Java操作数类型错误   java无法在ubuntu中设置类路径   使用Spring安全性初始化应用程序时发生java错误:未找到net/sf/ehcache/ehcache   音频如何在java中以毫秒X播放声音   以随机顺序打印数组中的字符串(java)   多线程如何获取java中的所有许可?