【问题标题】:Cumulative sum of a multidimensional Numpy Array with reset at 0重置为 0 的多维 Numpy 数组的累积和
【发布时间】:2021-08-19 15:21:02
【问题描述】:

我有一个多维 NumPy 数组 (16x212),我想计算 212 列中每一列的累积和 - 但是,如果有0 之间。

例如array([0, 1, -1, 1, 0, -1, 1, 0, 0, 1, 0, -1, 0, 0, 1, -1], ...)

我观看了以下视频,其中您将 0 和 1 的数组累积在一起,但是如果存在负数,该方法将不再起作用。

有人可以帮帮我吗?

【问题讨论】:

标签: python arrays python-3.x numpy multidimensional-array


【解决方案1】:

fill_zeros_with_last2d 基于this answer

这里的方法是取沿轴的累积总和,然后从后面的列中减去累积到最后一个零的总和。

import numpy as np

def fill_zeros_with_last2d(adj, arr ):
    row, col = np.indices( adj.shape )
    col[(adj == 0) & (arr != 0) ] = 0
    col = np.maximum.accumulate(col, axis = 1 )
    # Find the last column with a value

    return adj[row, col]

def cum_reset_2d( arr ):
    accum = arr.cumsum( axis = 1 )
    adj = accum * ( arr == 0 )
    return accum - fill_zeros_with_last2d( adj, arr )

在一个小数组上测试

np.random.seed( 1235 )

arr = np.random.randint( -1, 2, size = ( 5, 10 ))
arr
""" 
array([[ 1,  1,  1,  0, -1, -1, -1,  1,  1, -1],
       [ 1,  1, -1,  1,  1,  1, -1,  0, -1,  1],
       [ 0, -1,  1,  0,  0, -1,  1,  1,  0, -1],
       [ 1,  0, -1,  0, -1,  1,  0,  0,  1,  1],
       [-1,  0,  0, -1, -1,  1,  1, -1,  1, -1]])
"""

cum_reset_2d( arr )
""" 
array([[ 1,  2,  3,  0, -1, -2, -3, -2, -1, -2],
       [ 1,  2,  1,  2,  3,  4,  3,  0, -1,  0],
       [ 0, -1,  0,  0,  0, -1,  0,  1,  0, -1],
       [ 1,  0, -1,  0, -1,  0,  0,  0,  1,  2],
       [-1,  0,  0, -1, -2, -1,  0, -1,  0, -1]])
"""

注意我无法让它工作,因此需要在使用前进行测试。原始版本不适用于 arr[3],但它们现在看起来都还可以。可能还存在一些问题。我的 adj 值为零,必须保留但正在被覆盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 2019-09-20
    • 2016-07-11
    • 2018-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多