Implemented using ufunc.at method optimisation (but hackily so far)