2012-09-27 22 views
6

Estoy intentando dividir una matriz numpy usando un sector predefinido en una variable. Esto funciona:Numeración de segmentos de la variable

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

Pero lo que yo quiero hacer es algo como esto:

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

No es importante para mí qué tipo rebanada de la variable tiene, sólo estoy usando una cadena como un ejemplo. ¿Cómo guardo un especificador de sectores así?

Respuesta

13

Usted puede utilizar el incorporado en función de slice

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

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

Perfecto. Había estado mirando la función de corte, pero evidentemente no lo suficientemente cerca :-) Gracias (lo aceptaré tan pronto como el temporizador me lo permita). – XerXes

7

numpy.s_ and numpy.index_exp proporcionan una manera conveniente de hacer esto:

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

Ellos no pueden hacer nada que no se puede hacer con una combinación de slice, tuplas, None y Ellipsis, pero le permiten usar exactamente la misma sintaxis que usaría para cortar una matriz (la única diferencia entre s_ y index_exp es que para una porción unidimensional, s_ devuelve un objeto de división, mientras que index_exp lo envuelve en una tupla).

Cuestiones relacionadas