Пытаюсь понять отрицательный индекс массива numpy

#python #numpy #multidimensional-array

#python #numpy #многомерный массив

Вопрос:

Я пытаюсь понять некоторый код, и я столкнулся с отрицательным индексом в 3d-массиве, и я в замешательстве.

Сначала игрушечный пример:

 import numpy as np
mis = np.random.rand(2, 3, 4)

np.sort(mis, axis=2)[:, :, -2]
Out[428]: 
array([[0.409, 0.406, 0.668],
       [0.806, 0.715, 0.442]])
  

ОК. итак, играя с этим игрушечным примером, я изменил -2 на 2:

 np.sort(mis, axis=2)[:, :, 2]
Out[429]: 
array([[0.409, 0.406, 0.668],
       [0.806, 0.715, 0.442]])
  

Что здесь происходит, почему ответ тот же? В моих реальных данных размер mis во всех трех измерениях может быть намного больше, поэтому я хочу понять это правильно. Спасибо!

Редактировать: Обратите внимание, что я пробовал игрушку с неправильным размером (2,3,20), и результаты от этого не совпадают — но это просто смущает меня еще больше!

Ответ №1:

Он возвращает тот же результат, потому что -2 представляет второй элемент, начинающийся с конца, а 2 представляет 3-й элемент, начинающийся с начала (первый элемент индексируется до нуля). Поэтому он всегда возвращает третий элемент массива.

В приведенных ниже примерах я помещаю между звездочками соответствующие элементы.

 [[[0.22370153 0.26788364 **0.29264144** 0.83075949]
  [0.16376808 0.25345179 **0.26835547** 0.62549444]
  [0.37718569 0.61648076 **0.65733173** 0.68745722]]

[[0.1519311  0.44252181 **0.67729233** 0.83835924]
  [0.11297116 0.11889391 **0.26749958** 0.98031619]
  [0.03599794 0.35117534 **0.88740645** 0.93831347]]]
  

Ответ №2:

В этой задаче ваше третье измерение имеет размер 4 с индексами [0,1,2,3], и вы выбрали индекс -2, что означает 2-й от последнего, что в основном является вашим третьим индексом от начала, который равен 2, вот почему оба они одинаковы