Массив Python проиндексирован со списком, но размеры массива переставлены - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь проиндексировать массив (имеет пять измерений), используя список.Однако в определенных ситуациях массив переставляется.

Скажем, a имеет форму (3,4,5,6,7), т. Е.

>>> a = np.zeros((3,4,5,6,7))
>>> a.shape
(3, 4, 5, 6, 7)

Использование спискачтобы индексировать этот массив в третьем измерении, он выглядит нормально:

>>> a[:,:,[0,3],:,:].shape
(3, 4, 2, 6, 7)

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

>>> a[0,:,[0,1],:,:].shape
(2, 4, 6, 7)

Кто-нибудь может пролить свет на это?

Ответы [ 2 ]

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

Спасибо @Hari_Sheldon за ответ.Теперь я видел, что print сделал с массивом a , но я до сих пор не понимаю, почему Python берет эти столбцы, указанные списком, и помещаетих как строки в крайнем левом положении.Есть ли какая-либо ссылка, чтобы объяснить причину?

И, в некоторых ситуациях, эта перестановка измерений не происходит, то есть:

>>> a[0:1,:,[0,3]].shape
(1, 4, 2)

Как видите, вместо перестановкив (2, 4) порядок размеров остается!

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

Basic Slicing: -

Basic Slicing происходит при использовании объекта slice . Обычно объект слайса создается как array [(start:stop: step)]. Под этим также подразумеваются многоточие и ось.

Пример: - массив 1D

>>x=np.arange(10)    
>>x[2:10:3]
 array([2, 5, 8])

Пример: - 2Dмассив

>>>x = np.array([[1,2,3], [4,5,6]])
>>>x[1:2]
array([[4, 5, 6]])

Пример: - 3D-массив

>>>x = np.array([[[1],[2],[3]], [[4],[5],[6]]])
>>> x[0:1]
array([[[1],
        [2],
        [3]]])

В приведенном примере количество заданных срезов (obj) меньше, чем уобщее количество измерений массива. Если число объектов в кортеже выбора меньше, чем N, то оно предполагается для любых последующих измерений.

Расширенное нарезание: -

Расширенное индексирование запускается, когда объект выделения obj ,

  1. является объектом последовательности, не состоящим из кортежей,
  2. ndarray (с типом данных integer или bool),
  3. кортеж по крайней мере с одним объектом последовательности или ndarray (с типом данных integer или bool).

Существует два типа расширенной индексации: Integer и Boolean.

Индексирование целых чисел: -

Индексирование целых массивов позволяет выбирать произвольные элементы в массиве на основе их N-мерного индекса.Каждый целочисленный массив представляет количество индексов в этом измерении.

Если индекс состоит из такого количества целочисленных массивов, сколько индексируемых массивов имеет измерения, индексация является прямой, , но отличается от нарезки .

Пример: -

>>a = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>a[[0,1,2],[0,1,1]]
array([1, 5, 8])

Array Visualization

Приведенный выше пример печатает: a [0,0],a [1,0], a [2,1]

Помните: - Итак, целочисленная индексация сопоставляет два индекса.

Теперь к вашему вопросу: -

>>>a=np.array([3,4,5])
>>>a[0,:,[0,1]]

Первый случай: -

Это имеет вид x[arr1,:,arr2]. arr1 и arr2 являютсярасширенные индексы. Мы также считаем, что 0 также является расширенным индексом.

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

Это по существу означает, что размерность [0,1] стоит первой в арлучей.Я опускаю 0 , поскольку он не имеет измерения.

>>>a[0,:,[0,1]].shape
(2,4)

Второй случай: -

Это имеет вид x[:,:,arr1].Здесь только arr1 является расширенным индексом.

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

По сути это означает, что размерность [0,1] находится в соответствующей позиции, указанной в индексе массива.

>>>a[0:1,:,[0,1]].shape
(1,4,2)

[0,1] имеет форму (2,) и, поскольку оно встречается в третьем индексе, оно вставляется в третий индекс массива результатов.

Любые предложения и улучшения приветствуются.

Ссылка: -

  1. Numpy_Docs
...