2015-09-18 40 views
5

Tôi khó có thể hiểu được hình dạng của mảng kết quả được xác định như thế nào sau khi cắt thành khối. Ví dụ tôi đang sử dụng mã đơn giản sau đây:Xác định hình dạng của mảng kết quả sau khi cắt trong 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 

Output của việc này là:

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,) 

Trong cả hai trường hợp này, nội dung là giống nhau (như nó phải được). Nhưng chúng khác nhau về hình dạng. Vì vậy, làm thế nào để hình dạng kết quả được xác định bởi numpy?

+1

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

+2

Về cơ bản: cắt không làm giảm số lượng kích thước, nhưng lập chỉ mục với một số nguyên làm giảm số thứ nguyên theo 1 mỗi lần. –

+0

Có thuộc tính 'hình dạng'. Nhìn vào 'x .__ array_interface__' để xem nó và các thuộc tính khác. – hpaulj

Trả lời

5

Nó cơ bản để nắm này -

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 

Khi bạn làm a[1:2], bạn đang yêu cầu một mảng với 1 phần tử.

Khi bạn làm a[1], bạn đang yêu cầu phần tử tại chỉ mục đó.


Điều tương tự cũng xảy ra trong trường hợp của bạn.

Khi bạn làm - array[:,1:2,1] - nó có nghĩa là tất cả chỉ mục có thể từ thứ nguyên đầu tiên, danh sách phụ chỉ mục từ thứ nguyên thứ hai (mặc dù danh sách phụ chỉ chứa một phần tử) và chỉ mục thứ nhất từ ​​thứ nguyên thứ ba. Vì vậy, bạn lấy lại một mảng của mảng -

[[ 4] 
    [13] 
    [22]] 

Khi bạn làm - array[:,1,1] - nó có nghĩa là tất cả các chỉ số có thể từ khía cạnh đầu tiên, chỉ số 1 từ chiều thứ hai, và chỉ số 1 từ chiều thứ ba. Vì vậy, bạn có được trở lại một mảng -

[4 13 22] 
Các vấn đề liên quan