numpy 数组索引作为输入(来自用户)

numpy array index as input (from user)

用例是可以打开或关闭规则的用例。 想知道我是否可以使用 numpy 数组索引 对此的表达。 例如用户可以指定:

10:40:3

这意味着规则在每三天的第 10 到 40 天内处于活动状态。 如何使用给定的表达式在数组中建立索引。

10:40:3 表达式仅在 [] 内部有效,例如

x[10:40:3]

其中 x 是列表或数组。

Python 解释器将其翻译成:

x.__getitem__(slice(10,40,3))

可以将 '10:40:3' 字符串转换为 slice(10,40,3) 对象,但您也可以接受三个整数并从中构建切片。

切片可以用作:

idx = slice(10,40,3)
x[idx]

In [683]: idx = slice(1,10,2)
In [684]: np.arange(20)[idx]
Out[684]: array([1, 3, 5, 7, 9])
In [685]: np.arange(1,10,2)
Out[685]: array([1, 3, 5, 7, 9])

从字符串制作 slice 的简单方法:

In [687]: slice(*[int(i) for i in astr.split(':')])
Out[687]: slice(1, 10, 2)

numpy 还定义了一些可以帮助切片的特殊对象,但是 none 使用字符串

In [690]: np.r_[idx]
Out[690]: array([1, 3, 5, 7, 9])
In [691]: np.s_[1:10:2]
Out[691]: slice(1, 10, 2)
In [693]: np.s_[1::2]
Out[693]: slice(1, None, 2)
In [694]: np.s_[:]
Out[694]: slice(None, None, None)