Numpy Необычное индексирование с 2D-массивом - объяснение - PullRequest
1 голос
/ 07 января 2020

Я (пере) наращиваю свои знания о numpy, немного воспользовавшись им go. У меня есть вопрос о необычной индексации с помощью многомерных (в данном случае 2D) массивов.

Учитывая следующий фрагмент:

>>> a = np.arange(12).reshape(3,4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> i = np.array( [ [0,1],                        # indices for the first dim of a
...                 [1,2] ] )
>>> j = np.array( [ [2,1],                        # indices for the second dim
...                 [3,3] ] )
>>>
>>> a[i,j]                                     # i and j must have equal shape
array([[ 2,  5],
       [ 7, 11]])

Может ли кто-нибудь объяснить простым Engli sh, логикой c применяется для получения результатов. В идеале объяснение будет применимо для массивов 3D и более высокого ранга, используемых для индексации массива.

Концептуально (с точки зрения ограничений, налагаемых на "строки" и "столбцы"), что означает индексирование с использованием 2D массив?

1 Ответ

2 голосов
/ 07 января 2020

Концептуально (с точки зрения ограничений, налагаемых на "строки" и "столбцы"), что означает индексирование с использованием двумерного массива?

Это означает, что вы создаете 2d массив R , такой что R=A[B, C]. Это означает, что значение для r ij = a b ij c ij .

Таким образом, это означает, что элемент, расположенный в R[0,0], является элементом в A с индексом строки B[0,0] и индексом столбца C[0,0]. Элемент R[0,1] - это элемент в A с индексом строки B[0,1] и в качестве индекса столбца C[0,1] и т. Д. c.


Итак, в этом конкретном случае c:

>>> b = a[i,j]
>>> b
array([[ 2,  5],
       [ 7, 11]])

b[0,0] = 2, начиная с i[0,0] = 0, и j[0,0] = 2, и, таким образом, a[0,2] = 2. b[0,1] = 5 с i[0,0] = 1 и j[0,0] = 1, и, таким образом, a[1,1] = 5. b[1,0] = 7 с i[0,0] = 1 и j[0,0] = 3, и, таким образом, a[1,3] = 7. b[1,1] = 11, начиная с i[0,0] = 2 и j[0,0] = 3, и, таким образом, a[2,3] = 11.

Таким образом, вы можете сказать, что i будет определять "индексы строк", а j будет определять "столбец" индексы». Конечно, эта концепция также применима и в других измерениях: первый «индексатор» определяет индексы в первом индексе, второй «индексатор» - индексы во втором индексе и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...