нарезка массивов в numpy / scipy - PullRequest
14 голосов
/ 28 апреля 2010

У меня есть массив как:

a = array([[1,2,3],[3,4,5],[4,5,6]])

Какой самый эффективный способ вырезать из этого массив 1x2, в котором есть только первые два столбца «a»?

т.е.,

array([[2,3],[4,5],[5,6]]) in this case.

спасибо.

Ответы [ 3 ]

22 голосов
/ 28 апреля 2010

Двумерные числовые массивы индексируются с использованием a[i,j] (не a[i][j]), но вы можете использовать те же обозначения срезов для числовых массивов и матриц, что и для обычных матриц в Python (просто поместите их в один * 1003). *):

>>> from numpy import array
>>> a = array([[1,2,3],[3,4,5],[4,5,6]])
>>> a[:,1:]
array([[2, 3],
       [4, 5],
       [5, 6]])
5 голосов
/ 28 апреля 2010

Это то, что вы ищете?

a[:,1:]
2 голосов
/ 25 сентября 2017

Или другими словами (процитировать документация ) Синтаксис основного среза: i: j: k, где i - начальный индекс, j - индекс остановки, а k - шаг (k> 0)

Теперь, если 'i' не задано, по умолчанию 0 для k> 0 и n - 1 для k <0. Если j не задано, по умолчанию используется значение n. </p>

Это для одномерного массива. Теперь двухмерные массивы - это разные звери. Синтаксис среза представляет собой [rowrange, columnrange]

Итак, если вы хотите, чтобы все строки, но только последние два столбца, как в вашем случае, вы делаете а [0: 3,1: 3].

Здесь [0: 3] означает все строки от 0 до 3. и [1: 3] означает все столбцы от столбца 1 до столбца 3.

Теперь, как вы можете спросить, даже если у вас есть только 3 столбца и нумерация начинается с 1, технически эта команда должна возвращать 3 столбца правильно. т.е. столбец 1, столбец 2, столбец 3. Это сложная часть этого синтаксиса. Вы должны начать отсчет ПОСЛЕ первого номера. Поэтому, когда вы говорите [1: 3], вы на самом деле говорите, дайте мне столбец 2 и столбец 3. Какие последние два столбца вы хотите.

Теперь, если вы не знаете, какова длина вашей матрицы или хотите, чтобы все строки были, вы можете просто оставить эту часть пустой. * 1015 т.е. *

a [:, 1: 3] также будет работать.

То же самое относится и к столбцам. т.е. если вы хотите сказать, что все столбцы, кроме первой строки, вы бы написали

а [0: 1,:]

Теперь, как работает приведенный выше ответ [:, 1:], потому что когда вы говорите [1:] для столбцов, это означает, что вы даете мне что-нибудь ПОСЛЕ первого столбца и до конца всех столбцов. то есть пустое означает «до конца».

К настоящему времени вы должны понимать, что все, что находится по обе стороны от запятой, является подмножеством одномерного случая, который я впервые упомянул выше. т.е. если вы хотите указать свои строки, используя размеры шага, вы можете написать а [:: 2,1]

Который в вашем случае вернется массив ([[2, 3], [5, 6]])

То есть команда объясняется так: дай мне все строки, принимая по 2 за раз. Плюс дайте мне только последние 2 столбца.

Мне потребовалось некоторое время, чтобы понять. Так что вставьте это здесь, на случай, если это кому-нибудь поможет.

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