使用插值旋转 Python 中值的 3D 网格 (nxnxn) 的最佳方法?

Best way to rotate a 3D grid (nxnxn) of values in Python with interpolation?

如果我有一个 nxnxn 值网格,比如 32x32x32,并且我想在 x、y 或 z 轴上按某个旋转角度旋转这个立方体值网格,并插入缺失值,那会是什么不使用包(例如Scipy)中的任何现有算法的最佳方法是什么?

当 3D 旋转矩阵表示为 [n, 3] 矩阵时,我很熟悉将它应用于 3D 点网格,但我不确定如何在表示为 [n, 3] 矩阵时应用旋转以 3D 形式给出 nxnxn。

我找到了一个 ,但它使用三个 for 循环来实现它的方法,这在速度方面并没有真正扩展。是否有更矢量化的方法可以完成类似的任务?

提前致谢!

我能想到的一种方式是这样的:

  1. 将 nxnxn 矩阵重塑为包含 n 维点的数组
  2. 在此数组上应用旋转
  3. 将数组重新整形为 nxnxn

这是一些代码:

import numpy as np

#just a way to create some nxnxn matrix
n = 4
a = np.arange(n)
b = np.array([a]*n)
mat = np.array([b]*n)

#creating an array containg n-dimensional points
flat_mat = mat.reshape((int(mat.size/n),n))

#just a random matrix we will use as a rotation
rot = np.eye(n) + 2

#apply the rotation on each n-dimensional point
result = np.array([rot.dot(x) for x in flat_mat])
#return to original shape
result=result.reshape((n,n,n))
print(result)