存储Minhash的结果

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

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

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

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

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

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

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

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

你可以在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(字典),而你说它很简单 – 使用一个字典听起来很适合这里的问题。