我正在寻找一种简洁的方式:
a = numpy.array([1,4,1,numpy.nan,2,numpy.nan])
到:
b = numpy.array([1,5,6,numpy.nan,8,numpy.nan])
我目前能做的最好的是:
b = numpy.insert(numpy.cumsum(a[numpy.isfinite(a)]), (numpy.argwhere(numpy.isnan(a)) - numpy.arange(len(numpy.argwhere(numpy.isnan(a))))), numpy.nan)
有没有更短的方法来完成同样的事情?沿着二维数组的轴做一个 cumsum 怎么样?
最佳答案
Pandas
是一个建立在 numpy
之上的库。它是
Series
类有一个 cumsum
方法,它保留了 nan
并且比 DSM 提出的解决方案快得多:
In [15]: a = arange(10000.0)
In [16]: a[1] = np.nan
In [17]: %timeit a*0 + np.nan_to_num(a).cumsum()
1000 loops, best of 3: 465 us per loop
In [18] s = pd.Series(a)
In [19]: s.cumsum()
Out[19]:
0 0
1 NaN
2 2
3 5
...
9996 49965005
9997 49975002
9998 49985000
9999 49994999
Length: 10000
In [20]: %timeit s.cumsum()
10000 loops, best of 3: 175 us per loop
关于python - 考虑 NaN 的 Numpy cumsum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13051103/