2013-11-26 3 views
4

Предположим, у меня есть массивКак эффективно перевернуть многомерный массив numpy?

>>> a 
[[[0, 1, 2], [3, 4, 5], [6, 7, 8]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]] 

, что я хочу, чтобы перевернуть вокруг оси, чтобы в конечном итоге с

>>> aflipped 
[[[2, 1, 0], [5, 4, 3], [8, 7, 6]], [[12, 11, 10], [15, 14, 13], [18, 17, 16]]] 

Я хотел бы сделать это с какой-то из

>>> aflipped=a[::-1][::1][::1] 

или

>>>> aflipped=flipud(a) 

запись, так как я понимаю, что это очень быстро и (важно) с низким использованием памяти. Мой код заканчивается тем, что он меняет, цикл for не будет идеальным.

На самом деле это массив 4D, где я просто хочу перевернуть одну ось, но, похоже, мои параметры ограничены первыми двумя осями. Есть ли эффективный метод памяти для этого?

ответ

12

Что-то вроде этого:

>>> a = np.array([[[0, 1, 2], [3, 4, 5], [6, 7, 8]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]]) 
>>> a[:,:,::-1]  #or a[..., ::-1] 
array([[[ 2, 1, 0], 
     [ 5, 4, 3], 
     [ 8, 7, 6]], 

     [[12, 11, 10], 
     [15, 14, 13], 
     [18, 17, 16]]]) 

Временные сравнения:

>>> %timeit a[:,:,::-1] 
1000000 loops, best of 3: 1.53 µs per loop 
>>> %timeit a[..., ::-1] 
1000000 loops, best of 3: 1.06 µs per loop 
Смежные вопросы