2016-05-05 72 views
1

结果是固定数量的数组,我们假设列表(全部长度相同)在中。存储Minhash的结果

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

列表中的每个项目是列表还是其他内容?

我想到了一本字典,但键很平凡,1,2,...,M,所以我不确定这是否是pythonic的方式去这里。

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

回答

1

无论您选择什么容器,它都应该包含hash-itemID对,并且应该按散列进行索引或排序。未分类的数组将不具有远程效率。

假设你使用了一个体面大小的散列,并且你的各种散列算法得到了很好的实现,你应该能够同样有效地将所有minhashes存储在一个容器中,因为来自一个算法的minhash并且来自另一个的minhash可以忽略不计,如果发生任何这样的冲突,它将不会实质上改变相似性度量。

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

1

您可以在python列表中存储任何您想要的内容:整数,字符串,更多列表列表,字典,对象,函数 - 您的名字。

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(字典),而你说它很平凡 - 使用字典听起来像它适合问题在这里。