Ich habe eine Reihe von numpy Arrays. Eine davon ist eine Liste von "Schlüsseln", und ich möchte die Arrays in ein Diktat von Arrays umordnen, die auf diesem Schlüssel gekeyed sind. Mein aktueller Code ist:Konvertieren Sie schnell numpy Arrays mit Index zu dict von numpy Arrays auf diesen Index
for key, val1, val2 in itertools.izip(keys, vals1, vals2):
dict1[key].append(val1)
dict2[key].append(val2)
Dieses ziemlich langsam ist, da die beteiligten Arrays lang Millionen von Einträgen sind, und dies geschieht oft. Ist es möglich, dies in vektorisierter Form umzuschreiben? Die Menge der möglichen Schlüssel ist vor der Zeit bekannt, und es gibt ~ 10 unterschiedliche Schlüssel.
Edit: Wenn es k verschiedene Schlüssel gibt und die Liste n lang ist, sind die aktuellen Antworten O (nk) (einmal für jeden Schlüssel iterieren) und O (n log n) (zuerst sortieren). Ich suche aber immer noch nach einer O (n) vektorisierten Lösung. Dies ist hoffentlich möglich; Schließlich ist das leicht mögliche nicht-vectorisierte Ding (d. h. was ich bereits habe) O (n).
Ich denke, Pandas Werkzeuge für diese Art der Sache hat, aber du bist nicht viel Glück mit reinem NumPy gehen zu müssen. – user2357112
@ knzhou: Ich habe eine Implementierung, die O ist (n log n), aber selbst mit 10 Schlüsseln und 20 Millionen Einträgen ist es fast viermal schneller als Ihre O (n) -Lösung. Bist du wirklich nicht interessiert? –
Sie sagen, es gibt ~ 10 verschiedene Schlüssel. Was ist der Datentyp der Schlüssel? –