2011-07-22 9 views

cevap

9

Python, dilim sözdiziminden özel nesneler oluşturur, ancak yalnızca dizinleme için köşeli parantez içinde bulunur. Sen (...,0,:)(Ellipsis, 0, slice(None, None, None)) olduğunu bu durumda elle bu nesneleri (oluşturabilir veya takvimi biraz yardımcı nesnesi oluşturabilirsiniz:

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

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

Bu, doğrudan temsili önemsemediğinizi veya bunun ne anlama geldiğini varsaydığınız için sorunu çözer, çünkü sadece Numpy'de kullanmak üzere iletirsiniz. Temelde aynı düşünceye sahiptim, ama her şeyin ne olduğunu ve nasıl kazıldığını gösterdim :) –

3

(...,0,:) eşdeğer olmalıdır ...

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

Hayır, o değil 'dilim (0)'; '0' sadece bir endeks. –

+0

@Thomas: Evet, kendim düzeltildi. – JAB

0

Ben sadece 2 elemanını döndürür bir dilim tanımlamak örneğin üzere myslice = dilim (1,2) (yapmak istiyorum düşünüyorum yani myarray [myslice] == myarray [1: 2])

3

Python hakkında derli toplu bir şey aslında bunların nasıl incelemek için bir sınıf yapmak olabilir Python, indeksleme işlemlerini işlemek için __getitem__ sihirli yöntemini kullanır, bu yüzden bize nelerin geçtiğini göstermek için sınıfı aşırı yükleyen bir sınıf oluşturacağız, sınıfı başlatalım ve örneğe "endeksleyelim":

Ve sonuçlarımız şöyledir:

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

Ellipsis ve slice yerleşikleri, ve biz onların belgeleri okuyabilir: numpy içinde

help(Ellipsis) 
help(slice) 
5

Kullanım s_:

In [1]: np.s_[...,0,:] 
Out[1]: (Ellipsis, 0, slice(None, None, None))