Ich habe den folgenden Code-Arrays zu sammeln (wie eingelegte Dokumente in einer Sammlung Mongo gespeichert sind) und in eine Matrix numpy 2D Stack:Abrufen von mehreren Dokumenten aus mongo cursor.next() für eine bessere Leistung
db = MongoClient()['db']
total = db.command('collStats', 'collection')['count']
collection = db['collection']
X, Y = np.array([]), np.array([])
pipe = [{'$sample': {'size': total}}]
cursor = collection.aggregate(pipe, allowDiskUse=True)
for i in range(1000):
try:
xy = pickle.loads(cursor.next()['array'])
if not np.size(X):
X, Y = xy[0:-1], xy[-1]
else:
X, Y = np.vstack((X, xy[0:-1])), np.vstack((Y, xy[-1]))
except StopIteration:
break
Das ist extrem langsam. Wie kann ich das optimieren, zum Beispiel um mehrere Dokumente gleichzeitig von Mongo zu lesen? Alle anderen Optimierungstipps wären auch nützlich.
Haben Sie Ihren Code profiliert, um zu sehen, wo er die meiste Zeit verbringt? Warum benutzt du hier 'range'? – styvane
Warum müssen Sie den Befehl "collStats" ausführen? Außerdem gibt es ein Leistungsproblem mit '$ sample'. Was versuchst du zu machen? – styvane
@SSDMS, verwende ich 'range', um die Zufallsstichprobe zu durchlaufen und 1000 Dokumente, die als Arrays zurückgegeben werden, in einer 2D-Matrix zu stapeln. Ich führe den Befehl 'collstats' aus, um die Gesamtzahl der Dokumente in der Sammlung zu ermitteln. Grundsätzlich möchte ich auf zufällige Dokumente in der Sammlung zugreifen können. Es dient letztlich dazu, Trainingsbeispiele in ein neuronales Netzwerk einzubringen. Was sind die Leistungsprobleme mit '$ sample' und wie kann ich sie umgehen, während ich immer noch mache was ich will? – cerremony