Подтвердить что ты не робот

Python: разрезание многомерного массива

Я новичок в Python и numpy. Я выяснил, как отрезать 1 размер: arr[atart:end] и получить доступ к элементу массива: el = arr[row][col].

Попытка что-то вроде slice = arr[0:2][0:2] (где arr является массивом numpy) не дает мне первые 2 строки и столбцы, но повторяет первые 2 строки. Что я только что сделал, и как я перерезаю другое измерение?

4b9b3361

Ответ 1

Если вы используете numpy, это легко:

slice = arr[:2,:2]

или если вы хотите 0,

slice = arr[0:2,0:2]

Вы получите тот же результат.

* обратите внимание, что slice на самом деле является именем встроенного типа. Как правило, я бы посоветовал дать вашему объекту другое "имя".


Другой способ, если вы работаете со списками списков *:

slice = [arr[i][0:2] for i in range(0,2)]

(Обратите внимание, что здесь 0 нет необходимости: [arr[i][:2] for i in range(2)] также будет работать.).

Что я здесь сделал, так это то, что я принимаю каждую желаемую строку 1 за раз (arr[i]). Затем я вырезаю столбцы, которые хочу получить из этой строки, и добавьте их в список, который я создаю.

Если вы наивно попробуйте: arr[0:2] Вы получите первые 2 строки, которые, если вы затем снова нарисуете arr[0:2][0:2], вы снова нарезаете первые две строки.

* Это действительно работает и для массивов numpy, но это будет медленным по сравнению с "родным" решением, которое я разместил выше.