如何按顺序翻转 NumPy 数组中的每个维度?
How do you sequentially flip each dimension in a NumPy array?
我在 MATLAB 中遇到了以下函数,它按顺序翻转矩阵中的所有维度:
function X=flipall(X)
for i=1:ndims(X)
X = flipdim(X,i);
end
end
其中 X
的维度为 (M,N,P) = (24,24,100)
。鉴于 X
是一个 NumPy 数组,我如何在 Python 中执行此操作?
等价于 MATLAB 中的 flipdim
是 numpy
中的 flip
。请注意,这仅适用于 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]]
我在 MATLAB 中遇到了以下函数,它按顺序翻转矩阵中的所有维度:
function X=flipall(X)
for i=1:ndims(X)
X = flipdim(X,i);
end
end
其中 X
的维度为 (M,N,P) = (24,24,100)
。鉴于 X
是一个 NumPy 数组,我如何在 Python 中执行此操作?
等价于 MATLAB 中的 flipdim
是 numpy
中的 flip
。请注意,这仅适用于 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]]