gpt4 book ai didi

python - 使用 numpy cumsum 计算求和面积表的 3D 变体

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:43 26 4
gpt4 key购买 nike

如果是二维数组 array.cumsum(0).cumsum(1) 给出 Integral image数组的。

如果我在 3D 数组上计算 array.cumsum(0).cumsum(1).cumsum(2) 会怎样?

我是否获得 Integral Image 的 3D 扩展,即阵列上的 Integral volume?

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

我经历过这个讨论。 3D variant for summed area table (SAT)

这给出了如何计算积分体积的递归方法。如果我沿 3 个轴使用 cumsum 会怎么样。它会给我同样的东西吗?

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

最佳答案

是的,您给出的公式 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),否则将为该计算创建三个数组。最好的了解方法是进行测试(但前提是您需要)。

关于python - 使用 numpy cumsum 计算求和面积表的 3D 变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27229301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com