【发布时间】:2017-02-12 19:59:56
【问题描述】:
用例是可以打开或关闭规则的用例。 想知道我是否可以使用 numpy 数组索引 对此的表达。 例如用户可以指定:
10:40:3
这意味着规则每三天在第 10 天到第 40 天有效。 如何使用这样的给定表达式在数组中索引。
【问题讨论】:
-
数组的元素是什么?
-
这有关系吗?我猜可能是整数。
用例是可以打开或关闭规则的用例。 想知道我是否可以使用 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 还定义了一些可以帮助切片的特殊对象,但没有一个可以处理字符串
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)
【讨论】: