It avoids storing all the permutation results for sure, but speed is also an argument I think.
Indeed, we avoid a call to np.searchsorted after the reduce part. The problem is not so much with that call, but with the fact that to speed it up, I parallelized it, thus creating a slight overhead. A good option is to directly compute the rank in the workers that have been created for the permutation... only a tiny gain I must admit.