Zastanawiam się, czy ktoś wie, jak wektoryzować funkcję hashing w Pythonie. Na przykład, jest to mój kod:Hashowanie funkcji szumiących w pythonie
import numpy as np
hashlen = 5
x = np.array([4, 7, 4, 2, 6, 8, 0, 6, 3, 1])
h = np.array([0, 3, 1, 2, 4, 2, 1, 0, 3, 1])
funkcją mieszaja, h oznacza indeksy nowego wektora ja mieszaja X do, czyli indeksu 0 wektora hashed powinien mieć 4 i 6 podsumować, indeks 1 powinien mieć 4, 0 i 1 podsumował, itd. Otrzymany mieszany wektorów powinny być:
w = np.array([ 10, 5, 10, 10, 6])
Jednym ze sposobów na to jest oczywiście poprzez zapętlenie poprzez indeksy hash, czyli:
for itr in range(hashlen):
w[itr] = np.sum(x[np.where(h==itr)])
W przypadku dużych wektorów złożoność jest funkcją hashlen (długość mieszanego wektora). Może to zająć zbyt dużo czasu, szczególnie w przypadku np.where().
chcę zrobić coś takiego:
w = np.zeros(hashlen)
w[h]+= x
Jednak wynik ten jest taki sam jak robi
w = np.zeros(hashlen)
w[h] = x
Czy ktoś może dać mi znać, jeśli mam coś tutaj brakuje? A może istnieje "łatwy" sposób na mieszanie funkcji, który nie wymaga zbyt wielu obliczeń?
Dokładnie to, czego szukałem. Dzięki wielkie! –
Po prostu ciekawy - czy można coś takiego zrobić na macierzach zamiast wektorach? Bez pętli oczywiście. –
Zaktualizowano dla macierzy. Są inne sposoby, jeśli szukasz czegoś innego. – Daniel