字典中的NumPy切片表示法

时间:2015-05-14 18:33:03

标签: python python-2.7 numpy dictionary slice

我想知道是否可以在python字典中存储numpy切片表示法。类似的东西:

lookup = {0:[:540],
          30:[540:1080],
          60:[1080:]}

可以使用本机python切片语法,例如slice(0,10,2),但我无法存储更复杂的切片。例如,多维[:,:2,:, :540]

我目前的工作是将值存储为元组,然后将这些值解压缩到必要的切片中。

使用Python 2.x。

2 个答案:

答案 0 :(得分:9)

Python将语法[:, :2, :, :540]转换为slice个对象的元组:

(slice(None, None, None),
 slice(None, 2, None),
 slice(None, None, None),
 slice(None, 540, None))

生成此元组的便捷方法是使用特殊函数* np.s_。你只需要传递[...]表达式。例如:

>>> np.s_[:540]
slice(None, 540, None)
>>> np.s_[:, :2, :, :540]
(slice(None, None, None),
 slice(None, 2, None),
 slice(None, None, None),
 slice(None, 540, None))

然后你的切片字典可以写成:

lookup = {0: np.s_[:540],
          30: np.s_[540:1080],
          60: np.s_[1080:]}

* 从技术上讲,s_是实现特殊__getitem__方法的类IndexExpression的别名。

答案 1 :(得分:2)

Numpy有很多Indexing routines。在这种情况下,您可以使用以下函数生成索引数组:

c_:将切片对象沿第二轴转换为连接。

r_:将切片对象沿第一轴转换为连接。

s_为数组构建索引元组的更好方法

您还可以使用numpy.unravel_index

  

将索引数组的元组转换为平面索引数组,将边界模式应用于多索引。