Я хочу разрезать массив NumPy nxn. Я хочу извлечь произвольную выборку из m строк и столбцов этого массива (т. Е. Без какого-либо шаблона в количестве строк / столбцов), сделав его новым массивом mxm. В этом примере допустим, что массив имеет размер 4x4, и я хочу извлечь из него массив 2x2.
Вот наш массив:
from numpy import *
x = range(16)
x = reshape(x,(4,4))
print x
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
Удаляемая строка и столбцы совпадают. Самый простой случай - это когда я хочу извлечь подматрицу 2x2, которая находится в начале или в конце, например:
In [33]: x[0:2,0:2]
Out[33]:
array([[0, 1],
[4, 5]])
In [34]: x[2:,2:]
Out[34]:
array([[10, 11],
[14, 15]])
Но что, если мне нужно удалить другую смесь строк / столбцов? Что, если мне нужно удалить первую и третью строки / строки, извлекая таким образом подматрицу [[5,7], [13, 15]]
? Состав строк / строк может быть любым. Я где-то читал, что мне просто нужно проиндексировать мой массив, используя массивы / списки индексов как для строк, так и для столбцов, но это, похоже, не работает:
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])
Я нашел один способ, а именно:
In [61]: x[[1,3]][:,[1,3]]
Out[61]:
array([[ 5, 7],
[13, 15]])
Первая проблема с этим в том, что его трудно читать, хотя я могу с этим жить. Если у кого-то есть лучшее решение, я бы, конечно, хотел его услышать.
Еще я читал на форуме , что индексирование массивов с массивами заставляет NumPy делать копию нужного массива, таким образом при работе с большими массивами это могло стать проблемой. Почему это так / как работает этот механизм?