给出一个形状为__get
的numpy数组x,其中k是任意的,还有2个数组:
(N_1...N_k)
我想对x进行如下切片:start_indices=[a_1,...,a_k], end_indices=[b_1,...b_k], where `0<=a_i<b_i<=N_i`.
。
让我们说:
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))
但是没有用。
答案 0 :(得分:2)
您可以使用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
一起使用--p
indexer = tuple(map(slice,start_indices,end_indices))