Понимание NumPy осей - PullRequest
       3

Понимание NumPy осей

0 голосов
/ 28 марта 2019

Вот то, что я считаю осью, и хочу знать, правильное ли мое понимание

Мы считаем открывающую скобку [ слева, проиндексированной с 0, и это axis

eg1) [[1,2],[3,4]]

для [ найти все элементы, у которых есть один [ слева, элементы для оси 0. ([[ для оси 1 и т. д.)

0 axis: you see `[`: [x, y] where x = [1,2], y=[3,4]
1 axis: you see `[[`: [[x, y]] where x = [1,3], y = [2,4]

eg2) [[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]]

0 axis: you see `[` [x, y] where x = [[1,2,3], [4,5,6]], y= [[7,8,9], [10,11,12]]
1 axis: you see `[[`,  x = [1,2,3], [7,8,9] y = [4,5,6], [10,11,12]
2 axis: you see `[[[`, x = [1,4,7,10] y = [2,5,8,11] z = [3,6,9,12]

Если есть функция, которая принимает значение вдоль оси, я могу проверить, прав ли я, но ... ближайшая вещь, которую я нашел, была np.take

1 Ответ

0 голосов
/ 30 марта 2019

Для массива фигур (2,2):

In [13]: arr = np.array([[1,2],[3,4]])                                          
In [14]: arr                                                                    
Out[14]: 
array([[1, 2],
       [3, 4]])

Python unpacking просто выполняет итерацию в массиве, то есть в первом измерении, «строки»:

In [15]: x, y = arr                                                             
In [16]: x,y                                                                    
Out[16]: (array([1, 2]), array([3, 4]))

Чтобы распаковать столбцы, мы могли бы транспонировать массив, поэтому второе измерение - первое.Но я думаю, что понимание списка яснее:

In [17]: x, y = [arr[:,i] for i in range(2)]                                    
In [18]: x,y                                                                    
Out[18]: (array([1, 3]), array([2, 4]))

Для трехмерного массива:

In [19]: arr = np.arange(1,13).reshape(2,2,3)                                   
In [20]: arr                                                                    
Out[20]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

Результаты итерации по первому измерению должны быть очевидны - 2 блока или панели.

Вы правильно поняли 2-е измерение.Для третьего, результаты - 3 (2,2) массива:

In [21]: x,y,z=[arr[:,:,i] for i in range(arr.shape[2])]                        
In [22]: x                                                                      
Out[22]: 
array([[ 1,  4],
       [ 7, 10]])
In [23]: y                                                                      
Out[23]: 
array([[ 2,  5],
       [ 8, 11]])
In [24]: z                                                                      
Out[24]: 
array([[ 3,  6],
       [ 9, 12]])

x,y,z= из этого транспонирования также будет работать:

In [25]: arr.transpose(2,0,1)                                                   
Out[25]: 
array([[[ 1,  4],
        [ 7, 10]],

       [[ 2,  5],
        [ 8, 11]],

       [[ 3,  6],
        [ 9, 12]]])

np.take можно использовать какмоя индексация:

[np.take(arr,i,2) for i in range(3)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...