切片维数未知的ndarray

时间:2019-05-21 10:56:30

标签: python numpy numpy-ndarray

给出一个形状为__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))

但是没有用。

1 个答案:

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