python 三维图片 任意切片_反转Python中的任意切片

我正在寻找有关如何在Python中反转切片的通用方法.

我阅读了这篇综合性的文章,其中对切片的工作方式进行了一些不错的解释:

Understanding Python’s slice notation

但是,我无法找出关于如何计算反向切片的通用规则,该反向切片可以完全相反地处理相同的元素.实际上,我很惊讶没有找到一个内置的方法来做到这一点.

我正在寻找的是reversed_slice方法,该方法可以像这样使用任意的起始值,终止值和步长值(包括负值):

>>> import numpy as np

>>> a = np.arange(30)

>>> s = np.s_[10:20:2]

>>> a[s]

array([10, 12, 14, 16, 18])

>>> a[reversed_slice(s,len(a))]

array([18, 16, 14, 12, 10])

我尝试过但不起作用的是这样的:

def reversed_slice(slice_, len_):

"""

Reverses a slice (selection in array of length len_),

addressing the same elements in reverse order.

"""

assert isinstance(slice_, slice)

instart, instop, instep = slice_.indices(len_)

if instep > 0:

start, stop, step = instop - 1, instart - 1, -instep

else:

start, stop, step = instop + 1, instart + 1, -instep

return slice(start, stop, step)

这对于步骤1以及最后寻址的元素与stop-1一致时都适用.对于其他情况,它不会:

>>> import numpy as np

>>> a = np.arange(30)

>>> s = np.s_[10:20:2]

>>> a[s]

array([10, 12, 14, 16, 18])

>>> a[reversed_slice(s,len(a))]

array([19, 17, 15, 13, 11])

因此,似乎我缺少某种关系,例如(停止-开始)%step.

非常感谢您提供有关如何编写通用方法的帮助.

笔记:

>我确实知道还有其他可能性可以使具有相同元素的序列反转,例如调用reversed(a [s]).这不是一个选项,因为我需要反转切片本身.原因是我处理的是h5py数据集,该数据集不允许切片中使用负步进值.

>一种简单但不是很优雅的方法是使用坐标列表,即a [list(reversed(range(* s.indices(len(a)))))].由于h5py要求列表中的索引必须以递增顺序给出,因此这也不是一种选择.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值