带递归操作的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})})