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))