给定一个(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.如果不是,上述递归思想是最优的吗?
谢谢。
1条答案
按热度按时间3pmvbmvn1#
这里可以应用内核分裂方法来非常有效地解决这个问题,只需要两个
np.cumsum
:一个垂直,一个水平(或者相反,因为这是对称的)。下面是一个例子:
结果如下: