使用 numpy 在多个维度上高效展开

Efficiently unwrap in multiple dimensions with numpy

假设我有一个相位数组(来自复数)

A = np.angle(np.random.uniform(-1,1,[10,10,10]) + 1j*np.random.uniform(-1,1,[10,10,10]))

我现在想在所有维度上展开这个数组。在上面的 3D 情况下,我会做

A_unwrapped = np.unwrap(np.unwrap(np.unwrap(A,axis=0), axis=1),axis=2)

虽然这在 3D 情况下仍然可行,但在更高维度的情况下,这种方法对我来说似乎有点麻烦。使用 numpy 有更有效的方法吗?

我不确定是否有办法绕过沿每个轴执行 unwrap 操作。显然,如果它作用于单个元素,您可以使用矢量化,但这似乎不是这里的一个选项。你可以做的至少使 code 更干净的是在维度上创建一个循环:

for dim in range(len(A.shape)):
   A = np.unwrap(A, axis=dim)

您也可以重复应用一个函数,该函数将要操作的维度作为参数:

reduce(lambda A, axis: np.unwrap(A, axis=axis), range(len(A.shape)), A)

记住在Python中需要从functools导入3个reduce

您可以使用 np.apply_over_axes,它应该依次对数组的每个维度应用一个函数:

np.apply_over_axes(np.unwrap, A, np.arange(len(A.shape)))

我认为应该这样做。