带递归操作的dict(代数、集合、逻辑)

VectorDict的Python项目详细描述


vector dict提供对dict的所有预期操作,就好像它是 一个向量。

  • a*向量(其中a可以是标量或向量)
  • 矢量1+矢量2
  • 矢量1*矢量2
  • A/B(其中A和B中至少有一个是矢量)
  • cos(vector1,vector2)余弦相似性
  • Jaccard(矢量1,矢量2)

vectordict是从defautdict派生的,因此它对 初始化。

属性被传播到每个级别,它在任意深度dict上工作

它提供了一些有用的帮助: 来自阵列的路径 作为矢量 按行计算

#!/usr/bin/env python

from vector_dict import VectorDict

a = VectorDict( int, dict( x=1, y=1 ) )

b = VectorDict( int, dict( x=1, y=0, z=0) )

a + b

# Out : defaultdict(<type ‘int’>, {‘y’: 1, ‘x’: 2, ‘z’ : 0 })

a * b

#Out : defaultdict(<class ‘vector_dict.VectorDict’>, {‘y’: 0, ‘x’: 1})

print a.cos(b)

# Out : 0.7071067811865475

# sqrt(2) / 2 = acos(45°)

a.dot(b)

# Out : 1.0

a.norm()

# 1.4142135623730951

a.pprint()

# u’y’=1 # u’x’=1

助手

作为向量

矢量发生器的形式: 键的路径,以一组键的形式,值(叶)

a = VectorDict( int, dict( a=1, b = VectorDict(int, dict(c=1))))

[ (k, v) for k,v in a.as_vector_iter() ]

# Out: [((‘a’,), 1), ((‘b’, ‘c’), 1)]

如图所示

向量的一种生成器,它是((path),obj)或[(path)的元组+ 目标]] 例如,用于准备CSV的dict

a = VectorDict( int, dict( a=1, b = VectorDict(int, dict(c=1))))

[ e for e in a.as_row_iter(flatten=False) ]

# Out : [((‘a’,), 1), ((‘b’, ‘c’), 1)]

[ e for e in a.as_row_iter(flatten=True) ]

# Out : [[‘a’, 1], [‘b’, ‘c’, 1]]

从路径数组

从表示平面键数组的数组构建复杂的dict 以值结尾

path_from_array( [ “a”, “b” , 1 ])

# Out : defaultdict(<class ‘vector_dict.VectorDict’>, {‘a’: defaultdict(<class ‘vector_dict.VectorDict’>, {‘b’: 1})})

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

推荐PyPI第三方库


热门话题
通过signingReport运行安卓应用程序时发生java错误   java我需要实现hashCode()和equals()方法吗?   javascript Selenium Java从Pinterest下载图像   java Tomcat(嵌入式),无需重新启动即可进行更改   java检查每个if是否有匹配的endif   的java接口。我也是。罐子   mysql java。sql。SQLException:列索引超出范围,0<1。使用准备好的语句   如何在java中修改json字符串?   javascript智能手机的独特功能   web服务java。lang.NoSuchMethodError:javax。ws。rs.core。响应$Status$Family   sockets通过浏览器/URL与ServerSocket建立Java连接   JavaSpring数据自定义存储库和接口隔离原则   swing从不同的java类访问jdialog的一个实例   java如何根据发出的事件有条件地缓冲分组的可观察/流量?   用java将电子邮件正文导出为html文件   JavaSpring获取ServletContext并将其作为Bean提供   setter不做java中应该做的事情