2015-12-12 2 views
1

Я студент средней школы и глядя через некоторый Numpy код, я нашел что-то вдоль линийРазъяснения по индексации Numpy массива в Python

a = x[:,0:4] 

и х был 2-d массив. Я знаю, что [:] относится ко всем объектам в массиве a, поэтому для x [:, 0: 4] он будет ссылаться на все строки x и столбцов с индексом 0,1,2,3, исключая столбец с индексом 4?

Просто пытаюсь получить подтверждение о том, как это работает, потому что я видел его в нескольких типах кода и просто хотел быть уверенным.

+0

У вас есть это. Документы довольно приличные - [http://docs.scipy.org/doc/numpy/user/basics.indexing.html](http://docs.scipy.org/doc/numpy/user/basics.indexing. html) и [http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html) – wwii

ответ

1

Вы правы. Этот a = x[:,0:4] выбирает первые четыре столбца.

Пример:

>>> a = np.arange(25).reshape(5, 5) 
>>> a 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24]]) 

Вы можете пропустить 0 потому что a[:,:4] означает то же самое, как a[:,0:4]:

>>> a[:,:4] 
array([[ 0, 1, 2, 3], 
     [ 5, 6, 7, 8], 
     [10, 11, 12, 13], 
     [15, 16, 17, 18], 
     [20, 21, 22, 23]]) 

Вы всегда можете думать: «Первое измерение первое, второе измерение второй, и так далее «. В 2D-случае первое измерение представляет собой строки, а второе - столбцы.

0

Да это называется срез нотацией и Numpy массивы могут также использовать ломтик нотацию Python, так

>>>x = np.arange(25).reshape(5, 5) 
>>>a = x[:, 0:4] 
>>>a 
array([[ 0, 1, 2, 3], 
    [ 5, 6, 7, 8], 
    [10, 11, 12, 13], 
    [15, 16, 17, 18], 
    [20, 21, 22, 23]]) 

Если вы используете ломтик обозначение, x будет видом a и не копия, так если вы измените значение в массиве x, значение будет также изменено в a.

>>>x[1,1] = 1000 
>>>a 
array([[ 0, 1, 2, 3], 
     [ 5, 1000, 7, 8], 
     [ 10, 11, 12, 13], 
     [ 15, 16, 17, 18], 
     [ 20, 21, 22, 23]]) 
Смежные вопросы