存储Minhash的结果
Storing the result of Minhash
结果是固定数量的数组,比方说 python 中的列表(所有长度相同)。
人们也可以将其视为矩阵,因此在 c 中我会使用一个数组,其中每个单元格都指向另一个数组。如何在 Python 中完成?
每个项目都是列表或其他东西的列表?
我想到了一本字典,但键很简单,1、2、...、M,所以我不确定这是否是这里的 pythonic 方式。
我对实现不感兴趣,我感兴趣的是我应该遵循哪种方法,我应该做出哪种选择!
您可以在 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
如果您希望存储索引有意义的列表列表(意味着索引为您提供有关存储在那里的数据的一些信息),那么这基本上是重新实现哈希图(字典),而您说这很简单——使用字典听起来很适合这里的问题。
无论您选择什么容器,它都应该包含散列-itemID 对,并且应该按散列进行索引或排序。未排序的数组效率不高。
假设您使用的是大小适中的散列并且您的各种散列算法都得到了很好的实施,您应该能够同样有效地将所有 minhash 存储在一个容器中,因为来自一个容器的 minhash 之间发生冲突的可能性算法和来自另一个的 minhash 可以忽略不计,如果发生任何此类冲突,它不会显着改变相似性度量。
使用单个容器而不是多个容器可以减少索引的内存开销,但它也会稍微增加所需的处理量。由于内存通常是 minhash 的限制因素,因此单个容器可能更可取。
结果是固定数量的数组,比方说 python 中的列表(所有长度相同)。
人们也可以将其视为矩阵,因此在 c 中我会使用一个数组,其中每个单元格都指向另一个数组。如何在 Python 中完成?
每个项目都是列表或其他东西的列表?
我想到了一本字典,但键很简单,1、2、...、M,所以我不确定这是否是这里的 pythonic 方式。
我对实现不感兴趣,我感兴趣的是我应该遵循哪种方法,我应该做出哪种选择!
您可以在 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
如果您希望存储索引有意义的列表列表(意味着索引为您提供有关存储在那里的数据的一些信息),那么这基本上是重新实现哈希图(字典),而您说这很简单——使用字典听起来很适合这里的问题。
无论您选择什么容器,它都应该包含散列-itemID 对,并且应该按散列进行索引或排序。未排序的数组效率不高。
假设您使用的是大小适中的散列并且您的各种散列算法都得到了很好的实施,您应该能够同样有效地将所有 minhash 存储在一个容器中,因为来自一个容器的 minhash 之间发生冲突的可能性算法和来自另一个的 minhash 可以忽略不计,如果发生任何此类冲突,它不会显着改变相似性度量。
使用单个容器而不是多个容器可以减少索引的内存开销,但它也会稍微增加所需的处理量。由于内存通常是 minhash 的限制因素,因此单个容器可能更可取。