2012-09-27 14 views
6

Próbuję wyciąć tablicę numpy, używając wycinka predefiniowanego w zmiennej. To działa:Wycinanie numpy ze zmiennej

b = fromfunction(lambda x,y: 10*x+y, (5,4),dtype=int) # Just some matrix 

b[1:3,1:3] 
# Output: 
# array([[11, 12], 
#  [21, 22]]) 

Ale to, co chcę zrobić, to somthing tak:

slice = "1:3,1:3" 
b[slice] 
# Output: 
# array([[11, 12], 
#  [21, 22]]) 

To nie jest dla mnie ważne, jaki rodzaj plasterek-zmienna ma, jestem tylko przy użyciu ciąg jako przykład. Jak zapisać taki specyfikator plastra?

Odpowiedz

13

Można użyć wbudowanego slice funkcji

s = slice(1,3) 
b[s,s] 

ds = (s,s) 
b[ds] 
+0

Idealny. Patrzyłem na funkcję plasterka, ale widocznie nie do końca :-) Dzięki (zaakceptuję, jak tylko timer pozwoli mi to zrobić). – XerXes

7

numpy.s_ and numpy.index_exp zapewniają wygodny sposób robienia tego:

the_slice = numpy.index_exp[1:3, 1:3] 
b[the_slice] 

oni nie mogą nic, że nie można zrobić z roboty kombinacja slice, krotek, None i Ellipsis, ale umożliwiają one użycie dokładnie takiej samej składni, jaka byłaby użyta do wycięcia tablicy (jedyna różnica między s_ a index_exp jest to, że dla jednowymiarowego plasterka, s_ zwraca obiekt plastra, podczas gdy index_exp zawija go w krotkę).