Вы по-прежнему можете использовать numpy.ufunc.reduce
с пользовательской функцией, используя numpy.frompyfunc
. Просто сделайте что-то вроде этого:
#Example function
def does_it_halt(f, will_the_universe_ever_end):
if will_the_universe_ever_end:
return True
else:
does_it_halt(f)
# Creates a ufunc given the function object, the number of inputs, and the number of outputs
my_ufunc = numpy.frompyfunc(func=does_it_halt, nin=2, nout=1)
Тогда вы можете использовать это примерно так:
arr = np.arange(24).reshape((2, 3, 4))
>>> array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
#Group multiple axes
new_arr = np.concatenate([arr[0], arr[1]])
>>> array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
single_dim = new_arr.reshape(24)
>>> array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23])
# And finally reduce it
np.add.reduce(single_dim)
>>> 276