【问题标题】:numpy array index as input (from user)numpy 数组索引作为输入(来自用户)
【发布时间】:2017-02-12 19:59:56
【问题描述】:

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

10:40:3

这意味着规则每三天在第 10 天到第 40 天有效。 如何使用这样的给定表达式在数组中索引。

【问题讨论】:

  • 数组的元素是什么?
  • 这有关系吗?我猜可能是整数。

标签: python arrays numpy slice


【解决方案1】:

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)

【讨论】:

  • 不错!不知道(或认为)索引本身就是一个对象。它设计得很好。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 2018-07-10
  • 1970-01-01
  • 2013-01-11
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多