字典中的 NumPy 切片表示法
NumPy slice notation in a dictionary
我想知道是否可以在 python 字典中存储 numpy 切片符号。类似于:
lookup = {0:[:540],
30:[540:1080],
60:[1080:]}
可以使用原生 python 切片语法,例如slice(0,10,2)
,但我一直无法存储更复杂的切片。例如,多维的东西 [:,:2,:, :540]
.
我目前的解决方法是将值存储为元组,然后将它们解压缩到必要的切片中。
在 Python 2.x 工作。
语法 [:, :2, :, :540]
被 Python 转换为 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__
方法的 class IndexExpression
的别名。
Numpy 有很多 Indexing routines 。在这种情况下,您可以使用以下函数生成索引数组:
c_
:将切片对象转换为沿第二个轴的串联。
r_
:将切片对象转换为沿第一个轴的串联。
s_
: 为数组建立索引元组的更好方法.
您也可以使用 numpy.unravel_index
:
Converts a tuple of index arrays into an array of flat indices, applying boundary modes to the multi-index.
我想知道是否可以在 python 字典中存储 numpy 切片符号。类似于:
lookup = {0:[:540],
30:[540:1080],
60:[1080:]}
可以使用原生 python 切片语法,例如slice(0,10,2)
,但我一直无法存储更复杂的切片。例如,多维的东西 [:,:2,:, :540]
.
我目前的解决方法是将值存储为元组,然后将它们解压缩到必要的切片中。
在 Python 2.x 工作。
语法 [:, :2, :, :540]
被 Python 转换为 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__
方法的 class IndexExpression
的别名。
Numpy 有很多 Indexing routines 。在这种情况下,您可以使用以下函数生成索引数组:
c_
:将切片对象转换为沿第二个轴的串联。
r_
:将切片对象转换为沿第一个轴的串联。
s_
: 为数组建立索引元组的更好方法.
您也可以使用 numpy.unravel_index
:
Converts a tuple of index arrays into an array of flat indices, applying boundary modes to the multi-index.