多维 numpy 数组 -- 沿着给定轴反转

5

假设我有一个多维数组,其形状在运行时是未知的。

如何沿着给定轴k反转它,而这个轴也是在运行时不知道的呢?

符号somearray[:,:,::-1,:,:]依赖于静态维度引用,就像这个SO问题中所示,因此我不能在这里使用它。

2个回答

9
你可以像 @ali_m 建议的那样构建一个 slice 对象的元组,或者像下面这样做:
reversed_arr = np.swapaxes(np.swapaxes(arr, 0, k)[::-1], 0, k)

这将所需的轴放在形状元组的前面,然后反转该第一个轴,并将其返回到原始位置。

有些人认为这种方法缺乏可读性,但我不同意。


由于它返回一个视图,所以数组不会被复制,这是一种好的方法。此外,当需要在给定的“axis”上更改LHS中的数组时,我发现这种方法最优雅。 - dashesy

7
我会使用slice对象的元组来实现这个功能:
def reversedim(M,k=0):
    idx = tuple((slice(None,None,-1) if ii == k else slice(None) 
            for ii in xrange(M.ndim)))
    return M[idx]

6
我不这么认为。请参见这里 - “请注意,数组的切片不会复制内部数组数据,而是产生原始数据的新视图。” - ali_m

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接