#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, вот почему оба они одинаковы