微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何有效地计算二维累积和

如何解决如何有效地计算二维累积和

给定一个形状为 X 的二维数值数组 (m,n),我想计算一个形状相同的数组 Y,其中 Y[i,j] 是累积和X[i_,j_]0<=i_<=i,0<=j_<=j。如果 X 描述二维概率分布,则 Y 可以被认为是二维累积分布函数 (CDF)。

我显然可以在双 Y 循环中计算 for 的所有条目。但是,此计算存在递归方面,如 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
  2. 如果不是,上面的递归思想是最优的吗?

谢谢。

解决方法

可以在此处应用核分裂方法来非常有效地解决此问题,只需两个 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]]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。