2016-05-05 13 views
1

Das Ergebnis ist eine feste Anzahl von Arrays, sagen wir Listen (alle von gleicher Länge) in .Speichern des Ergebnisses von Minhash

Man könnte es auch als eine Matrix sehen, also würde ich in ein Array verwenden, wo jede Zelle auf ein anderes Array zeigen würde. Wie geht es in Python?

Eine Liste, in der jeder Artikel eine Liste oder etwas anderes ist?

Ich dachte an ein Wörterbuch, aber die Schlüssel sind trivial, 1, 2, ..., M, also bin ich nicht sicher, ob das der pythonische Weg ist, hier zu gehen.

Ich bin nicht an der Implementierung interessiert, ich bin daran interessiert, welchen Ansatz ich folgen sollte, in welcher Wahl ich treffen sollte!

Antwort

1

Welcher Container Sie auch auswählen, er sollte Hash-itemID-Paare enthalten und sollte nach dem Hash-Code indiziert oder sortiert sein. Unsortierte Arrays sind nicht remote effizient.

Angenommen, Sie verwenden einen anständig großen Hashwert und Ihre verschiedenen Hash-Algorithmen sind gut implementiert, sollten Sie alle Minhashes in einem einzigen Container speichern können, da die Wahrscheinlichkeit einer Kollision zwischen einem Minhash und einem Algorithmus besteht und ein Minhash von einem anderen ist vernachlässigbar, und wenn eine solche Kollision auftritt, wird das Ähnlichkeitsmaß nicht wesentlich geändert.

Die Verwendung eines einzelnen Containers im Gegensatz zu mehreren reduziert den Arbeitsspeicher-Overhead für die Indizierung, erhöht jedoch auch den Verarbeitungsaufwand geringfügig. Da Speicher normalerweise der limitierende Faktor für Minhash ist, kann ein einzelner Container vorzuziehen sein.

1

Sie können alles, was Sie wollen in einer Python-Liste speichern: Ints, Strings, mehr Listen Listen, Dicts, Objekte, Funktionen - Sie nennen es.

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

So eine Liste von Listen speichern gerade ist recht vorwärts:

>>> 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 

Wenn Sie eine Liste von Listen zu speichern suchen, in dem der Index von Bedeutung ist (der Index Sinn gibt Ihnen einige Informationen über die Daten, die dort gespeichert werden), dann ist das im Grunde eine Hashimap (Wörterbuch) neu zu implementieren, und während Sie sagen, es ist trivial - mit einem Wörterbuch klingt, wie es das Problem gut passt hier.

Verwandte Themen