python 如何高效地计算二维累加和

ac1kyiln  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(139)

给定一个(m,n)形状的二维数值数组X,我想计算一个相同形状的数组Y,其中Y[i,j]X[i_,j_]0<=i_<=i, 0<=j_<=j的累积和,如果X描述了一个二维概率分布,那么Y可以被认为是二维累积分布函数(CDF)。
显然,我可以在一个双for循环中计算Y的所有项,但是,这个计算有一个递归的方面,如Y[i,j] = X[i,j] + Y[i-1,j] + Y[i,j-1] - Y[i-1,j-1](其中负索引表示0)。
我正在寻找"2d Python cumsum",我发现NumPy的cumsum只是将数组扁平化。

    • 我的问题:**

1.是否有一个标准的Python函数可以高效地计算Y
1.如果不是,上述递归思想是最优的吗?
谢谢。

3pmvbmvn

3pmvbmvn1#

这里可以应用内核分裂方法来非常有效地解决这个问题,只需要两个np.cumsum:一个垂直,一个水平(或者相反,因为这是对称的)。
下面是一个例子:

x = np.random.randint(0, 10, (4, 5))
print(x)
y = np.cumsum(np.cumsum(x, axis=0), axis=1)
print(y)

结果如下:

[[1 9 8 1 7]
 [0 6 8 2 3]
 [1 3 6 4 4]
 [0 8 1 2 9]]

[[ 1 10 18 19 26]
 [ 1 16 32 35 45]
 [ 2 20 42 49 63]
 [ 2 28 51 60 83]]

相关问题