2015-09-18 3 views
5

Мне сложно понять, как определяется форма результирующего массива после нарезки в numpy. Например, я использую следующий простой код:Определение формы массива результатов после нарезки в Numpy

import numpy as np 


array=np.arange(27).reshape(3,3,3) 

slice1 = array[:,1:2,1] 
slice2= array[:,1,1] 

print "Content in slice1 is ", slice1 
print "Shape of slice1 is ", slice1.shape 
print "Content in slice2 is ",slice2 
print "Shape of Slice2 is", slice2.shape 

Выход этого:

Content in slice1 is 
[[ 4] 
    [13] 
    [22]] 
Shape of slice1 is (3, 1) 
Content in slice2 is [ 4 13 22] 
Shape of Slice2 is (3,) 

В обоих этих случаях содержание такое же (как это должно быть). Но они различаются по форме. Итак, как результирующая форма определяется numpy?

+1

http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html – Kasramvd

+2

В основном: нарезка не уменьшает количество измерений, но индексирование с целое число уменьшает количество измерений на 1 каждый раз. –

+0

Существует атрибут 'shape'. Посмотрите на 'x .__ array_interface__', чтобы увидеть его и другие атрибуты. – hpaulj

ответ

5

Это в основном сводится к следующему -

In [118]: a = np.array([1,2,3,4,5]) 

In [119]: a[1:2] 
Out[119]: array([2]) 

In [120]: a[1] 
Out[120]: 2 

Когда вы a[1:2], вы просите массив с 1 элементом.

Когда вы делаете a[1], вы просите элемент по этому индексу.


Аналогичные вещи случаются в вашем случае.

Когда вы это сделаете - array[:,1:2,1] - это означает все возможные индексы из первого измерения, под-список индексов из второго измерения (хотя в под-списке содержится только один элемент) и 1-й индекс из третьего измерения. Таким образом, вы получите обратно массив массивов -

[[ 4] 
    [13] 
    [22]] 

Когда вы делаете - array[:,1,1] - это означает, что все возможные индексы из первого измерения, 1-й индекса от второго измерения, и 1-го индекса от третьего измерения. Таким образом, вы получаете обратно массив -

[4 13 22] 
Смежные вопросы