При индексировании одномерного массива что означает None и почему меняется форма? - PullRequest
0 голосов
/ 20 февраля 2019
a = np.array([1, 2, 3])
a.shape
(3,)# why not(1,3)?
v1 = np.array([4, 5, 6])[None,:] # what does none over here mean?
v1.shape
(1,3) #why (1,3) here?

Почему форма показывает разные ответы для 1-го массива и что здесь ничего не значит?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

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

Но нев numpy .

В numpy одномерный массив - это нечто:

  1. , который печатает (n,) в качестве своей формы (где n - длина его единственного измерения)
  2. Чьим элементам требуется индивидуальный доступ только к одному индексу.

Кусковой двумерный массив - это нечто:

  1. Что печатает (m,n)как его форма
  2. Чьи элементы требуют индивидуального доступа к двум индексам.

Атрибут shape для numpy ndarray сообщает вам длину каждого измерения массива.

В a = np.array([1, 2, 3]) вы создаете одномерный массив, а длина этого единственного измерения равна 3.

Чтобы создать «ближайший» двумерный массив, вам нужно будет вызвать np.array([[1, 2, 3]]).

Обратите внимание на последовательный [[ в начале и последовательный ]] в конце.Эти двойные скобки также появятся при печати этого двумерного массива.

Количество последовательных скобок в начале (или в конце) обычно соответствует тому, как вы визуально вычисляете количество измерений в ndarray..

Использование None в качестве индекса в numpy

Обычно в Python при разрезании списка или индексации в списке вы, вероятно, привыкли кполучая результат, который имеет либо такое же число измерений, либо меньшее число измерений.

Но в случае с крошечным обозначением иногда можно использовать индексирование для построениямногомерный ndarray.

Это то, что вы делаете здесь, когда вы берете результат np.array([4, 5, 6]) и затем индексируете его как [None, :].

В numpy, когда Noneуказывается в качестве индекса, это то же самое, что и указание numpy.newaxis.(Это просто более компактная альтернатива numpy.newaxis)

И указание numpy.newaxis в качестве индекса для конкретной позиции (в вашем случае позиция 0 среди индексов) похоже на:«Я хочу добавить еще одно измерение, имеющее длину 1, в этой конкретной позиции»

(Обратите внимание, что в numpy слова axis и dimension используется взаимозаменяемо в документации).

В вашем случае np.array([4, 5, 6]) сначала возвращает одномерный массив, а длина этого единственного измерения равна 3 (поскольку имеется 3 элемента).

Когда вы затем индексируете в этом одномерном массиве с помощью [None, :], ваш первый индекс None фактически говорит о том, что вы хотите добавить префикс нового измерения длиной 1 в позицию 0 (то есть позицию 0 средииндексы).Другими словами, вы говорите, что хотите сначала создать внешний массив длины 1, и единственным элементом этого внешнего массива будет внутренний массив, а форма и содержимое этого внутреннего массива дополнительно определяется индексами, которыеследуйте вашему None (в данном случае только :).

(Поскольку длина этого нового префиксного измерения всегда равна 1, единственным допустимым индексом, который вы можете использовать для этого нового измерения, будет0)

Ваш второй индекс (:) фактически указывает, что вы хотите получить, когда вы используете индекс 0 в этом новом префиксном измерении.Указывая : в качестве второго индекса, вы фактически говорите, что хотите, чтобы весь результат np.array([4, 5, 6]) присутствовал в позиции 0 нового префиксного измерения.

0 голосов
/ 20 февраля 2019

Нарезка здесь выполняется с помощью объекта np.newaxis.Может принимать значение по умолчанию None.

np.array([1, 2, 3]) в основном содержит 3 столбца и 1 строку.Обычно кортеж с одним значением заканчивается, наконец, символом ','.

np.array([4, 5, 6])[None,:] использует объект np.newaxis, который может быть установлен на None.В свою очередь он отображает каждый элемент в каждой строке.

Ссылка на объект newaxis: numpy.newaxis

Объект newaxis можно использовать во всех операциях среза для созданияось длины одна.newaxis является псевдонимом «None», и вместо него можно использовать «None» с тем же результатом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...