Ответ 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]])
Я новичок в numpy
, и мне трудно понять, как извлечь из подкатегории np.array
с определенными столбцами и строками:
Y = np.arange(16).reshape(4,4)
Если я хочу извлечь столбцы/строки 0 и 3, я должен иметь:
[[0 3]
[12 15]]
Я пробовал все функции изменения... но не могу понять, как это сделать. Любые идеи?
Дайте 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]])
Одним из решений является индексирование строк/столбцов путем нарезки/шага. Вот пример, в котором вы извлекаете каждый третий столбец/строку из первого в последний столбцы (т.е. Первый и четвертый столбцы)
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
.
Вы также можете сделать это, используя:
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),:]
, а затем индексирует его.
Прежде всего, ваш 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])
print y[0:4:3,0:4:3]
- кратчайшее и наиболее подходящее исправление.