I had a look at what it would take to improve the C-solution. However I find 
that it is beyond my C-programming skils. 

The gufunc defintion seems to be at odds with current working of the axis 
keyword for mean, std and var. The latter support computation over multiple 
axes, whereas the gufunc only seems to support calculation over a single axis.  
As the behaviour of std, mean and var is largely inherited from ufuncs those 
might offer a better starting point.

If the operator used in the ufunc could take a parameter from the outer_loop 
accessing in this case the mean, then it would be possible to calculate the 
required intermediate quantities. This should be a possibility as somewhere the 
out array is also accessed in the correct manner and we should step through 
both arrays in the same way.

Instead of:

'''Pseudocode
result = np.full(result_shape, op.identity) # op = ufunc

loop_outer_axes_result_array:
    loop_over_inner_axes_input_array:
        result[outer_axes] = op(result[outer_axes],
                                InArray[outer_axes + inner_axes])
'''

we would then get:


'''Pseudocode
result = np.full(result_shape, op.identity) # op = ufunc

loop_outer_axes_result_array:
    loop_over_inner_axes_input_array:
        result[outer_axes] = op(result[outer_axes],
                                InArray[outer_axes + inner_axes],
                                ParameterArray[outer_axes])
'''

Using for op:

'''Pseudocode
op(a,b,c) = a+b-c
'''

and for b the original data and for c the mean (M_1) you would obtain the Neely 
correction for the mean.

Similarly using:

'''Pseudocode
op(a,b,c) = a+(b-c)^2
'''
you would obtain the sum of squared errors.
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to