2012-09-27 59 views
6

我想切片使用在变量中预定义的切片的numpy数组。这工作:Numpy从变量切片

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

但是我想做的是财产以后这样的:

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

这对我并不重要切片变量有什么类型的,我只是用一个字符串作为一个例子。我如何保存这样的分片说明符?

回答

13

您可以使用内置的slice功能

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

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

完美。我一直在看切片函数,但显然不够紧密:-)谢谢(只要定时器允许,我会接受)。 – XerXes

7

numpy.s_ and numpy.index_exp提供这样的方便的方法:

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

他们不能做任何事情,你不能用做slice,元组,NoneEllipsis的组合,但它们允许您使用与用于切片数组完全相同的语法(s_和之间的唯一区别是对于一维片,s_返回片对象,而index_exp将其包装在一个元组中)。