切片的索引slice(start, stop[, step])
通常可以表示为range(start, stop, step)
(或者range(*slice(start, stop, step).indices(length))
在考虑基础维度时).
假设我有两个多维切片,第二个切片可以用作应用第一个切片的结果的切片.
例:
import numpy as np data = np.random.rand(*(100, 100, 100)) a = data[::2, 7, :] # slice 1, a.shape = (50,100) b = a[1, ::-1] # slice 2, b.shape = (100,)
我想找到一个用于计算执行相同工作的单个切片的通用表达式.我知道底层数据结构的维度.
c = data[2, 7, ::-1] # same as b np.array_equal(b, c) # True
所以,从获得[::2, 7, :]
并[1, ::-1]
以[2, 7, ::-1]
在这个例子中,我需要像一个函数:
def concatenate_slices(shape, outer_slice, inner_slice): ... return combined_slice
哪里outer_slice
和inner_slice
都将成为切片的元组.在示例shape=(100, 100, 100)
和outer_slice=(slice(None, None, 2), 7, slice(None, None, None))
和inner_slice=(1, slice(None, None, -1))
.
我不确定如何有效地做到这一点.
__getitem__(slice)
调用时我的对象做了一些事情(没有中间视图),我想只做一次,但仍然有可能有片切片.
作为扩展(可选)我想知道如果切片中有椭圆会发生什么.我怎样才能组合起来呢?