Python 切片NumPy数组给定通用维度的开始和结束索引

Python 切片NumPy数组给定通用维度的开始和结束索引,python,numpy,indexing,numpy-ndarray,Python,Numpy,Indexing,Numpy Ndarray,给定一个形状为(N_1…N_k)的numpy数组x,其中k是任意的,2个数组: start_indices=[a_1,...,a_k], end_indices=[b_1,...b_k], where `0<=a_i<b_i<=N_i`. 我希望输出等于x[450:550,0:1000400:600] 例如,我试图定义: slice_arrays = (np.arange(start_indices[i], end_indices[i]) for i in range(k))

给定一个形状为
(N_1…N_k)
的numpy数组x,其中k是任意的,2个数组:

start_indices=[a_1,...,a_k], end_indices=[b_1,...b_k], where `0<=a_i<b_i<=N_i`.
我希望输出等于
x[450:550,0:1000400:600]

例如,我试图定义:

slice_arrays = (np.arange(start_indices[i], end_indices[i]) for i in range(k))
和使用

x[slice_arrays]

但是它不起作用。

您可以使用
slice
表示法来创建可用于索引的索引元组-

indexer = tuple([slice(i,j) for (i,j) in zip(start_indices,end_indices)])
out = x[indexer]
或者,用速记-

或者使用
map
进行压缩-

indexer = tuple(map(slice,start_indices,end_indices))

成功了,谢谢!我用数组而不是元组尝试了完全相同的方法,但没有成功,但这似乎解决了问题
np.s
在这里不是真正的速记,是吗?;^)@PaulPanzer Nah没有在这里保存任何字符。
arange
创建数组,数组以不同的方式索引。
indexer = tuple([np.s_[i:j] for (i,j) in zip(start_indices,end_indices)])
indexer = tuple(map(slice,start_indices,end_indices))