Если вы хотите пропустить все остальные строки и все остальные столбцы, то вы можете сделать это с помощью базовой нарезки:
In [49]: x=np.arange(16).reshape((4,4))
In [50]: x[1:4:2,1:4:2]
Out[50]:
array([[ 5, 7],
[13, 15]])
Это возвращает представление, а не копию вашего массива.
In [51]: y=x[1:4:2,1:4:2]
In [52]: y[0,0]=100
In [53]: x # <---- Notice x[1,1] has changed
Out[53]:
array([[ 0, 1, 2, 3],
[ 4, 100, 6, 7],
[ 8, 9, 10, 11],
[ 12, 13, 14, 15]])
, в то время как z=x[(1,3),:][:,(1,3)]
использует расширенное индексирование и, следовательно, возвращает копию:
In [58]: x=np.arange(16).reshape((4,4))
In [59]: z=x[(1,3),:][:,(1,3)]
In [60]: z
Out[60]:
array([[ 5, 7],
[13, 15]])
In [61]: z[0,0]=0
Обратите внимание, что x
не изменяется:
In [62]: x
Out[62]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Если вы хотите выбрать произвольноестроки и столбцы, то вы не можете использовать базовую нарезку.Вам придется использовать расширенное индексирование, используя что-то вроде x[rows,:][:,columns]
, где rows
и columns
- последовательности.Это, конечно, даст вам копию, а не вид вашего исходного массива.Это, как и следовало ожидать, поскольку массивный массив использует непрерывную память (с постоянными шагами), и не было бы никакого способа генерировать представление с произвольными строками и столбцами (так как для этого потребовались бы непостоянные шаги).