给定一个形状为 (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 进行切片:x[a_1:b_1,...,a_k:b_k]
。
可以说:
x is of shape `(1000, 1000, 1000)`
start_indices=[450,0,400]
end_indices=[550,1000,600].
我希望输出等于x[450:550,0:1000,400: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]
或者,使用简写 np.s_
-
indexer = tuple([np.s_[i:j] for (i,j) in zip(start_indices,end_indices)])
或者使用 map
来实现紧凑的 -
indexer = tuple(map(slice,start_indices,end_indices))
关于python - 给定通用维度的开始和结束索引,对 NumPy 数组进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56236779/