我正在将一些 matlab 代码转换为 python。我使用表示为 numpy 数组的 3d 卷 h x w x d
,我使用 SO here 中的函数从此卷中提取较小的 3d 补丁。因此,如果我有 32x32x32
数组并提取 16x16x16
补丁,我最终会得到一个形状 (2, 2, 2, 16, 16, 16)
在处理每个补丁后,我想将它放回形状 h x w x d
基本上是反向 { {1}} 不循环每个维度的惯用 numpy 方式是什么?由于我还需要处理 2d 和 4d 数据,因此我希望避免为每个维度创建一个函数。
答案 0 :(得分:1)
通常情况下,不建议回写 as_strided
视图,因为它会导致竞争条件,但由于您只创建了块,因此应该可以:
original_shaped_array = windowed_array.transpose(0,3,1,4,2,5).reshape(32,32,32)
此外,如果您从不复制窗口数组,并在原地进行计算,则应更改原始数组中的数据 - 窗口视图只是对相同数据的新视图。 如果有任何重叠,请不要这样做