Python 如何在PyTorch中将坐标值的三维网格分割为块?

Python 如何在PyTorch中将坐标值的三维网格分割为块?,python,matrix,pytorch,Python,Matrix,Pytorch,如果我有一批坐标位置的统一3D网格,带有形状(例如,[1,32,32,32,3],那么将其拆分为多个偶数块的最佳方法是什么,这样我就可以得到类似[1,4096,2,2,2,3]的东西?换句话说,我把一个大的32x32x32立方体,其中每个点都是x,y,z坐标位置,分成4096个更小的2x2x2立方体?一个简单的视图操作在这里有意义吗,还是会偏离坐标值?我曾研究过像torch.chunk这样的操作,但它们需要一个特定的维度来拆分,我不确定这是否适用于这里 我的用例是,我有一个较小的[1,16,16

如果我有一批坐标位置的统一3D网格,带有形状(例如,[1,32,32,32,3],那么将其拆分为多个偶数块的最佳方法是什么,这样我就可以得到类似[1,4096,2,2,2,3]的东西?换句话说,我把一个大的32x32x32立方体,其中每个点都是x,y,z坐标位置,分成4096个更小的2x2x2立方体?一个简单的视图操作在这里有意义吗,还是会偏离坐标值?我曾研究过像torch.chunk这样的操作,但它们需要一个特定的维度来拆分,我不确定这是否适用于这里

我的用例是,我有一个较小的[1,16,16,16,3]立方体,所以我尝试将这个较小形状中的点匹配到上采样[1,32,32,32,3]形状中相应的立方体中(因为16^3形状中的一个坐标点对应于32^3形状中的8个点)

对于其他上下文,以下是我现在生成三维网格的方式:

pxs = torch.linspace(-1, 1, 32)
pys = torch.linspace(-1, 1, 32)
pzs = torch.linspace(-1, 1, 32)

pxs = pxs.view(-1, 1, 1).expand(*shape).contiguous().view(size)
pys = pys.view(1, -1, 1).expand(*shape).contiguous().view(size)
pzs = pzs.view(1, 1, -1).expand(*shape).contiguous().view(size)
points = torch.stack([pxs, pys, pzs], dim=1)

grid_3d = torch.reshape(points, (32, 32, 32, 3))

只需使用您想要的尺寸对其进行重塑即可:

In [29]: lin = np.linspace(-1, 1, 32)
    ...: cube = np.stack(np.meshgrid(lin, lin, lin), axis=-1)
    ...: cube.shape
Out[29]: (32, 32, 32, 3)

In [30]: new_cube = cube.reshape((1, 4096, 2, 2, 2, 3))
    ...: new_cube.shape
Out[30]: (1, 4096, 2, 2, 2, 3)

谢谢你的回复!这也是我最初考虑的,但我不确定它是否保留了坐标的位置。例如,我想象的是,如果我有一个坐标点的三维网格,那么每个子立方体将是一个相邻点的立方体。但是,我不确定这在多大程度上取决于我如何初始化原始三维坐标网格。这有意义吗?