2016-08-29 3 views
3

Я, кажется, нашел ошибку, когда я использую Python 2.7 с Numpy модуля:NumPy 3 одномерный массив среднего индексирование ошибка

import numpy as np 
x=np.arange(3*4*5).reshape(3,4,5) 
x 

Здесь я получил полный «х» массив следующим образом:

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], 
     [25, 26, 27, 28, 29], 
     [30, 31, 32, 33, 34], 
     [35, 36, 37, 38, 39]], 

     [[40, 41, 42, 43, 44], 
     [45, 46, 47, 48, 49], 
     [50, 51, 52, 53, 54], 
     [55, 56, 57, 58, 59]]]) 

Затем я пытаюсь индексации отдельных значений строк в листе [1]:

x[1][0][:] 

Результат:

array([20, 21, 22, 23, 24]) 

Но что-то не так в то время как я пытаюсь индексирование одного столбца в листе [1]:

x[1][:][0] 

Результат все равно будет такой же, как предыдущая:

array([20, 21, 22, 23, 24]) 

Если это будет массив ([20, 25, 30, 35]).

Кажется, что-то неправильно, индексируя средний индекс с диапазоном?

+2

Я думаю, что вы хотите использовать 'х [1,:, 0]', а не 'х [1 ] [:] [0] '. Вторая берет 1-й элемент от самой внешней оси, а затем из возвращенного массива, возвращает все, а из возвращаемого массива берет 0-й элемент, снова от самой внешней оси. – ayhan

+0

Или поочередно, который показывает полную работу ... a [1,:,:] [:, 0] массив ([20, 25, 30, 35]) .... срез посередине, затем столбец –

ответ

3

Нет, это не ошибка.

При использовании [:] вы используете для нарезки нотации и принимает весь список:

l = ["a", "b", "c"] 
l[:] 
#output: 
["a", "b", "c"] 

и в вашем случае:

x[1][:] 
#output: 
array([[20, 21, 22, 23, 24], 
     [25, 26, 27, 28, 29], 
     [30, 31, 32, 33, 34], 
     [35, 36, 37, 38, 39]]) 

То, что вы действительно желание использует NumPy indexing обозначения:

x[1, : ,0] 
#output: 
array([20, 25, 30, 35]) 
1

Это не ошибка. x[1][:][0] не является множественным индексом («дайте мне элементы, где первое измерение равно 1, второе - любое, третье - 0»). Вместо этого вы индексируете три раза, три объекта.

x1 = x[1]  # x1 is the first 4x5 subarray 
x2 = x1[:] # x2 is same as x1 
x3 = x2[0] # x3 is the first row of x2 

Чтобы использовать несколько индекс, вы хотите сделать это в одном срезе:

x[1, :, 0] 
Смежные вопросы