存储Minhash的结果

时间:2016-05-05 23:50:25

标签: python c list dictionary minhash

结果是固定数量的数组,比如中的列表(所有长度相同)。

人们也可以将它看作矩阵,所以在我会使用一个数组,其中每个单元格都指向另一个数组。如何用Python做到这一点?

每个项目都是列表或其他内容的列表?

我想到了一本字典,但关键是微不足道的,1,2,......,M,所以我不确定这是否是这里的pythonic方式。

我对实施不感兴趣,我对我应该遵循哪种方法感兴趣,我应该选择哪种方式!

2 个答案:

答案 0 :(得分:1)

你可以在python列表中存储你想要的任何东西:整数,字符串,更多列表,dicts,对象,函数 - 你可以命名它。

anything_goes_in_here = [1, 'one', lambda one: one / 1, {1: 'one'}, [1, 1]]

因此,存储列表列表非常简单:

>>> list_1 = [1, 2, 3, 4]
>>> list_2 = [5, 6, 7, 8]
>>> list_3 = [9, 10, 11, 12]
>>> list_4 = [13, 14, 15, 16]
>>> main_list = [list_1, list_2, list_3, list_4]
>>> for list in main_list:
...     for num in list:
...             print num
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

如果您希望存储索引有意义的列表列表(意味着索引为您提供了有关存储在那里的数据的一些信息),那么这基本上是重新实现了一个hashmap(字典),当你说它&#时39; s琐碎 - 使用字典听起来很适合这里的问题。

答案 1 :(得分:1)

无论您选择哪个容器,它都应该包含hash-itemID对,并且应该通过哈希对其进行索引或排序。未排序的数组效率不高。

假设你正在使用一个体面的大小哈希并且你的各种哈希算法都很好地实现了,你应该能够有效地将所有的minhashes存储在一个容器中,因为minhash与一个minhash之间发生冲突的可能性很小。算法和来自另一个的minhash可以忽略不计,如果发生任何这样的碰撞,它就不会大幅改变相似性度量。

使用单个容器而不是多个容器减少了索引的内存开销,但它也略微增加了所需的处理量。由于记忆通常是minhash的限制因素,因此最好使用单个容器。