1

如果是二维数组array.cumsum(0).cumsum(1),则给出数组的积分图像

如果我计算array.cumsum(0).cumsum(1).cumsum(2)3D 数组会发生什么?

我是否获得积分图像的 3D 扩展,即阵列上的积分体积?

很难想象在 3D 情况下会发生什么。

我已经完成了这个讨论。 总面积表 (SAT) 的 3D 变体

这为如何计算积分体积提供了一种递归方式。如果我cumsum沿 3 个轴使用 怎么办。它会给我同样的东西吗?

它会比递归方法更有效吗?

4

1 回答 1

1

是的,您给出的公式array.cumsum(0).cumsum(1).cumsum(2), 将起作用。

该公式所做的是计算一些部分总和,以便这些总和的总和是体积总和。也就是说,每个元素都需要精确地求和一次,或者换句话说,不能跳过任何元素,也不能将元素计算两次。我认为通过这些问题中的每一个(是否有任何元素被跳过或计算了两次)是向自己验证这是否可行的好方法。并运行一个小测试:

x = np.ones((20,20,20)).cumsum(0).cumsum(1).cumsum(2)

print x[2,6,10]   # 231.0
print 3*7*11      # 231

当然,所有的错误都可能有两个相互抵消的错误,但这不会在任何地方发生,所以这是一个合理的测试。

至于效率,我猜单程方法可能更快,但不会快很多。此外,可以使用输出数组加速上述操作,例如,cumsum(n, out=temp)否则将为此计算创建三个数组。最好的了解方法是测试(但仅在需要时)。

于 2014-12-01T21:13:24.780 回答