okay so it turns out np.random.choice to sample according to some distribution is just so slow and bad in my use case that by implementing this myself the runtime is now best measured in hours instead of years???