将数组范围作为参数传递给函数?

ste*_*ten 8 python arrays arguments numpy

有没有办法将数组范围作为参数传递给函数?就像是 :

> blah(ary,arg1=1:5)

def blah(ary,arg1): print ary[arg1]
Run Code Online (Sandbox Code Playgroud)

hpa*_*ulj 7

Python 1:5仅在方括号内接受语法.解释器将其转换为slice对象.然后__getitem__,对象的方法应用切片.

看一下numpy/lib/index_tricks.py利用这个的一些功能.实际上它们不是函数,而是定义自己__getitem__方法的类.该文件可能会给你一些想法.

但如果你不满意,那么可能包括:

blah(arr, slice(1, 5))
blah(arr, np.r_[1:5])
Run Code Online (Sandbox Code Playgroud)

nd_grid,mgrid,ogrid延长"切片"的概念,以接受一个假想的"步骤"的值:

mgrid[-1:1:5j]
# array([-1. , -0.5,  0. ,  0.5,  1. ])
Run Code Online (Sandbox Code Playgroud)

请注意,在将切片传递给blah函数之前在切片上展开的任何内容都不会知道另一个参数的形状.所以np.r_[:-1]回报吧[].

并且None可以用于slice:例如slice(None,None,-1)相当于[::-1].


Set*_*ton 6

您可以使用切片功能

>>> def blah(ary,arg1):
...     print ary[arg1]
>>> blah(range(10), slice(1, 5))
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)