python - 考虑 NaN 的 Numpy cumsum

标签 python arrays numpy nan cumsum

我正在寻找一种简洁的方式:

 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/

相关文章:

javascript - 如何在 mongoDB 中的数组和文档之间进行匹配和查找

C 获取 3 个字符串输入,然后放入字符数组中

python - pip install numpy (python 2.7) 失败,错误代码为 1

python - 从没有标题的 CSV 中在 Pandas 中绘制图表

python - Django 使用 tweepy oauth 出现属性错误

Python子进程CREATE_NEW_CONSOLE Windows在kill()时未关闭

python - 如何才能减少计算量?大量时效率很低

python - 2个 Pandas 数据框列之间的矢量化/矩阵计算

ios - NSArray 的大小

python - 如何返回二维数组中除一列之外的所有列?