2011-07-22 21 views

Trả lời

9

Python tạo các đối tượng đặc biệt ngoài cú pháp slice, nhưng chỉ bên trong dấu ngoặc vuông để lập chỉ mục. Bạn có thể tạo ra các đối tượng bằng tay (trong trường hợp này, (...,0,:)(Ellipsis, 0, slice(None, None, None)), hoặc bạn có thể tạo một đối tượng helper nhỏ:

class ExtendedSliceMaker(object): 
    def __getitem__(self, idx): 
     return idx 

>>> ExtendedSliceMaker()[...,0,:] 
(Ellipsis, 0, slice(None, None, None)) 
+0

Điều này trực tiếp giải quyết vấn đề, giả sử bạn không thực sự quan tâm đến việc biểu diễn hoặc ý nghĩa của nó bởi vì bạn chỉ cần chuyển nó xung quanh để sử dụng trong Numpy. Tôi đã có suy nghĩ tương tự về cơ bản, nhưng cho thấy làm thế nào để khai thác và tìm ra tất cả mọi thứ là :) –

3

Tương đương với (...,0,:) nên ...

>>> myslice = (..., 0, slice(None, None)) 
>>> myslice 
(Ellipsis, 0, slice(None, None, None)) 
+0

Không, nó không phải là 'lát (0) '; '0' chỉ là một chỉ mục. –

+0

@Thomas: Vâng, đã tự sửa lỗi. – JAB

0

Tôi nghĩ rằng bạn muốn chỉ làm myslice = lát (1,2) để ví dụ xác định một lát sẽ trở lại các yếu tố thứ 2 (tức là myarray [myslice] == myarray [1: 2])

3

Điều gọn về Python là bạn thực sự có thể làm cho một lớp học để kiểm tra cách thức các Python sử dụng phương pháp ma thuật __getitem__ để xử lý các hoạt động lập chỉ mục, vì vậy chúng tôi sẽ tạo một lớp quá tải để hiển thị cho chúng tôi những gì đã được truyền vào, khởi tạo lớp và "lập chỉ mục" cho cá thể:

class foo: 
    def __getitem__(self, index): print index 

foo()[...,0,:] 

Và kết quả của chúng tôi là:

(Ellipsis, 0, slice(None, None, None)) 

Ellipsisslice đang dựng sẵn, và chúng ta có thể đọc tài liệu của họ:

help(Ellipsis) 
help(slice) 
5

Sử dụng s_ trong NumPy:

In [1]: np.s_[...,0,:] 
Out[1]: (Ellipsis, 0, slice(None, None, None)) 
Các vấn đề liên quan