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

Подматрица экстракта

Я новичок в numpy, и мне трудно понять, как извлечь из подкатегории np.array с определенными столбцами и строками:

Y = np.arange(16).reshape(4,4)

Если я хочу извлечь столбцы/строки 0 и 3, я должен иметь:

[[0 3]
 [12 15]]

Я пробовал все функции изменения... но не могу понять, как это сделать. Любые идеи?

4b9b3361

Ответ 1

Дайте np.ix_ попробовать:

Y[np.ix_([0,3],[0,3])]

Это возвращает желаемый результат:

In [25]: Y = np.arange(16).reshape(4,4)
In [26]: Y[np.ix_([0,3],[0,3])]
Out[26]:
array([[ 0,  3],
       [12, 15]])

Ответ 2

Одним из решений является индексирование строк/столбцов путем нарезки/шага. Вот пример, в котором вы извлекаете каждый третий столбец/строку из первого в последний столбцы (т.е. Первый и четвертый столбцы)

In [1]: import numpy as np
In [2]: Y = np.arange(16).reshape(4, 4)
In [3]: Y[0:4:3, 0:4:3]
Out[1]: array([[ 0,  3],
               [12, 15]])

Это дает вам результат, который вы искали.

Для получения дополнительной информации ознакомьтесь с этой страницей при индексировании в NumPy.

Ответ 3

Вы также можете сделать это, используя:

Y[[[0],[3]],[0,3]]

что эквивалентно выполнению этого с помощью индексирующих массивов:

idx = np.array((0,3)).reshape(2,1)
Y[idx,idx.T]

Чтобы сделать работу широковещания по своему желанию, вам нужно, чтобы размер вашего индексационного массива не был равен единице, чтобы выровнять его с осью, в которую вы индексируете, например. для двумерного подматрицы n x m:

Y[<n x 1 array>,<1 x m array>]

Это не создает промежуточный массив, в отличие от ответа CT Zhu, который создает промежуточный массив Y[(0,3),:], а затем индексирует его.

Ответ 4

Прежде всего, ваш Y имеет только 4 столбца и строки, поэтому нет col4 или row4, не более col3 или row3.

Чтобы получить 0, 3 столбца: Y[[0,3],:] Чтобы получить 0, 3 строки: Y[:,[0,3]]

Итак, чтобы получить запрошенный массив: Y[[0,3],:][:,[0,3]]

Обратите внимание, что если вы просто Y[[0,3],[0,3]] эквивалентно [Y[0,0], Y[3,3]], и результат будет состоять из двух элементов: array([ 0, 15])

Ответ 5

print y[0:4:3,0:4:3]

- кратчайшее и наиболее подходящее исправление.