使用numpy有效地展开多个维度

时间:2017-07-19 08:57:09

标签: python arrays numpy unwrap

假设我有一系列阶段(来自复数)

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有更有效的方法吗?

2 个答案:

答案 0 :(得分:1)

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

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

我相信这应该做到。

答案 1 :(得分:0)

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

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 3中reduce需要从functools导入。