假设我有一个多维数组,其形状在运行时才会知道。
如何沿给定轴k反转它,直到运行时才知道?
符号somearray[:,:,::-1,:,:]
依赖于静态维度引用as in this other SO question,因此我无法在此处使用它。
答案 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]