2016-09-15 54 views
4

我曾经遇到过在MATLAB以下功能依次翻转所有在矩阵的尺寸:如何顺序翻转NumPy数组中的每个维度?

function X=flipall(X) 
    for i=1:ndims(X) 
     X = flipdim(X,i); 
    end 
end 

X具有尺寸(M,N,P) = (24,24,100)。我怎样才能在Python中做到这一点,因为X是一个NumPy数组?

+0

什么是X'的'在Python格式?它是一个列表还是一个NumPy数组?有太多的信息来回答你的问题。 – rayryeng

+0

@rayryeng - 这是一个numpy数组 – Wajih

+0

谢谢。你没有在你的文章中说清楚。 – rayryeng

回答

5

MATLAB中相当于flipdim的是flipnumpy。请注意,这仅在版本1.12.0中可用。

因此,它只是:

import numpy as np 

def flipall(X): 
    Xcopy = X.copy() 
    for i in range(X.ndim): 
     Xcopy = np.flip(Xcopy, i) 
    return Xcopy 

因此,你只需调用它像这样:

Xflip = flipall(X) 

但是,如果你知道先验你只有三个维度,您可以通过简单的操作对代码进行硬编码:

def flipall(X): 
    return X[::-1,::-1,::-1] 

这将每个维度都一个接一个地翻转。


如果您不具有版本1.12.0(感谢用户hpaulj),你可以使用slice做同样的操作:

import numpy as np 

def flipall(X): 
    return X[[slice(None,None,-1) for _ in X.shape]] 
+1

这个怎么样,X [:: - 1,:: - 1,:: - 1]它会是一样的吗? – Wajih

+0

@Wajih正确。假设你有三个维度。该代码适用于任何数量的'numpy'数组。 – rayryeng

+0

谢谢。 Python语法有时候很混乱。是的维度将是3,所以它会工作得很好:) – Wajih