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

时间:2017-02-12 19:59:57

标签: python arrays numpy slice

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

10:40:3

这意味着规则在第3天到第40天每隔三天就有效。 如何使用这样的给定表达式对数组进行索引。

1 个答案:

答案 0 :(得分:3)

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还定义了一些可以帮助切片的特殊对象,但没有一个用于字符串

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)