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