On Tue, Oct 23, 2012 at 6:11 PM, Cera, Tim <t...@cerazone.net> wrote:
> I have an array that is peppered throughout in random spots with 'nan'.  I
> would like to use 'cumsum', but I want it to reset the accumulation to 0
> whenever a 'nan' is encountered.  Is there a way to do this?  Aside from a
> loop - which is what I am going to setup here in a moment.

How about this?


def nancumsum(x):
    nans = np.isnan(x)
    x = np.array(x)
    x[nans] = 0
    reset_idx = np.zeros(len(x), dtype=int)
    reset_idx[nans] = np.arange(len(x))[nans]
    reset_idx = np.maximum.accumulate(reset_idx)
    cumsum = np.cumsum(x)
    cumsum = cumsum - cumsum[reset_idx]
    return cumsum

-- 
Robert Kern
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to