Python 重置为0的多维Numpy数组的累积和
我有一个多维NumPy数组(16x212),我想计算212列中每一列的累积和-但是,如果中间有一个0,计算应该在0重新开始。 e、 g.Python 重置为0的多维Numpy数组的累积和,python,arrays,python-3.x,numpy,multidimensional-array,Python,Arrays,Python 3.x,Numpy,Multidimensional Array,我有一个多维NumPy数组(16x212),我想计算212列中每一列的累积和-但是,如果中间有一个0,计算应该在0重新开始。 e、 g.数组([0,1,-1,1,0,-1,1,0,0,1,0,-1,0,0,1,-1],…) 我观看了下面的视频,其中您将0和1的数组累积在一起,但是如果存在负数,该方法将不再有效 有人能帮我吗?用最新的2D填充0是基于 这里的方法是沿着轴取累积的和,然后从后面的任何列中减去累积到最后一个零的和 import numpy as np def fill_zeros_w
数组([0,1,-1,1,0,-1,1,0,0,1,0,-1,0,0,1,-1],…)
我观看了下面的视频,其中您将0和1的数组累积在一起,但是如果存在负数,该方法将不再有效
有人能帮我吗?
用最新的2D填充0
是基于
这里的方法是沿着轴取累积的和,然后从后面的任何列中减去累积到最后一个零的和
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
值为零,必须保留,但被覆盖。以下是视频链接: