2016-09-15 5 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

Эквивалент flipdim в MATLAB: flip в numpy. Следует иметь в виду, что это доступно только в версии 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