Numpy Advanced индексация путаница

Если a является массивом фигуры (5,3), b имеет форму (2,2), а c имеет форму (2,2), какова форма a[b,c]?

Может кто-нибудь объяснить это мне на примере. Я прочитал документы, но до сих пор не могу понять, как это работает.

1 ответ

Решение

Просто для того, чтобы изложить концепцию расширенной индексации, вот надуманный пример:

# input arrays
In [22]: a
Out[22]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14]])

In [23]: b
Out[23]: 
array([[0, 1],
       [2, 3]])

In [24]: c
Out[24]: 
array([[0, 1],
       [2, 2]])

# advanced indexing
In [25]: a[b, c]
Out[25]: 
array([[ 0,  4],
       [ 8, 11]])

По выражению a[b, c]мы используем массивы b а также c выборочно вытащить элементы из массива a,

Чтобы интерпретировать вывод a[b, c]:

    # b            # c            # 2D indices
    [[0, 1],       [[0, 1]   ---> (0,0)  (1,1)
     [2, 3]]        [2, 2]]  ---> (2,2)  (3,2)

2D-индексы будут просто применяться к массиву a и соответствующие элементы будут возвращены как массив в результате a[b, c]

 a[(0,0)]  --> 0
 a[(1,1)]  --> 4
 a[(2,2)]  --> 8
 a[(3,2)]  --> 11

Вышеуказанные элементы возвращаются как двумерный массив, так как массивы b а также c сами 2D-массивы.


Также обратите внимание, что расширенная индексация всегда возвращает копию.

In [27]: (a[b, c]).flags.owndata
Out[27]: True
Другие вопросы по тегам