我想知道是否可以在python字典中存储numpy切片表示法。类似的东西:
lookup = {0:[:540],
30:[540:1080],
60:[1080:]}
可以使用本机python切片语法,例如slice(0,10,2)
,但我无法存储更复杂的切片。例如,多维[:,:2,:, :540]
。
我目前的工作是将值存储为元组,然后将这些值解压缩到必要的切片中。
使用Python 2.x。
答案 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
:
将索引数组的元组转换为平面索引数组,将边界模式应用于多索引。