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

时间:2013-06-29 00:10:34

标签: python arrays numpy

假设我有一个多维数组,其形状在运行时才会知道。

如何沿给定轴k反转它,直到运行时才知道?

符号somearray[:,:,::-1,:,:]依赖于静态维度引用as in this other SO question,因此我无法在此处使用它。

2 个答案:

答案 0 :(得分:9)

您可以构建一个slice对象的元组,例如@ali_m建议,或者执行以下操作:

reversed_arr = np.swapaxes(np.swapaxes(arr, 0, k)[::-1], 0, k)

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

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

答案 1 :(得分: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]