假设我有一系列阶段(来自复数)
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有更有效的方法吗?
答案 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
导入。