Хранение результата Minhash
Результатом является фиксированное количество массивов, скажем, списков (все одинаковой длины) в python.
Можно было бы также видеть это как матрицу, поэтому в c я бы использовал массив, где каждая ячейка указывала бы на другой массив. Как это сделать в Python?
Список, где каждый элемент представляет собой список или что-то еще?
Я подумал о словаре, но ключи тривиальны, 1, 2, ..., M, так что я не уверен, является ли это питонским путем.
Меня не интересует реализация, меня интересует, какой подход я должен использовать, какой выбор должен сделать!
2 ответа
Какой бы контейнер вы ни выбрали, он должен содержать пары hash-itemID и должен индексироваться или сортироваться по хешу. Несортированные массивы не будут удаленно эффективными.
Предполагая, что вы используете хэш приличного размера, и ваши различные алгоритмы хеширования хорошо реализованы, вы должны иметь возможность точно так же эффективно хранить все minheshes в одном контейнере, поскольку существует вероятность столкновения между minhash из одного алгоритма и minhash из другое ничтожно мало, и если произойдет любое такое столкновение, это существенно не изменит меру подобия.
Использование одного контейнера в отличие от нескольких уменьшает накладные расходы памяти для индексации, хотя также немного увеличивает объем необходимой обработки. Поскольку память обычно является ограничивающим фактором для minhash, один контейнер может быть предпочтительным.
Вы можете хранить все, что вы хотите в списке 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
Если вы хотите сохранить список списков, в которых индекс имеет смысл (то есть индекс дает вам некоторую информацию о хранящихся там данных), то это в основном переопределение хэш-карты (словаря), и, хотя вы говорите, что это тривиально - использование словарь звучит так, как будто хорошо вписывается в проблему.