是否有一种智能且简单的方法将两个切片操作合二为一?
说我有类似的东西
arange(1000)[::2][10:20]
>>> array([20, 22, 24, 26, 28, 30, 32, 34, 36, 38])
Run Code Online (Sandbox Code Playgroud)
当然在这个例子中这不是问题,但如果数组非常大,我非常想避免创建中间数组(或者没有?).我认为应该可以将两个切片结合起来,但也许我正在监督某些事情.所以这个想法是这样的:
arange(1000)[ slice(None,None,2) + slice(10,20,None) ]
Run Code Online (Sandbox Code Playgroud)
这当然不起作用,但我想做的.是否有任何组合切片对象?(尽管我的努力,我没有找到任何东西).
slice以使切片的这种叠加成为可能。只需覆盖__add__(或__mul__- 数学家肯定更喜欢*叠加符号)。但它会调用一些数学。顺便说一句,你可以用这些东西制作一个不错的 Python 包 ;-)PS一般来说,可以使用多重切片使代码更好、更清晰。甚至在以下几行之一之间进行简单的选择:
v = A[::2][10:20]
v = A[20:40][::2]
v = A[20:40:2]
Run Code Online (Sandbox Code Playgroud)
能深刻反映程序逻辑,使代码自文档化。
再举一个例子:如果你有一个扁平的 NumPy 数组,并且你希望在positionlength 的位置提取一个子数组length,你可以这样做
v = A[position : position + length]
Run Code Online (Sandbox Code Playgroud)
或者
v = A[position:][:length]
Run Code Online (Sandbox Code Playgroud)
自己决定哪个选项看起来更好。;-)
| 归档时间: |
|
| 查看次数: |
3229 次 |
| 最近记录: |