在给定通用维度的开始和结束索引的情况下对 NumPy 数组进行切片
Slicing NumPy array given start and end indices for generic dimensions
给定一个形状为 (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]
或者,shorthand 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))
给定一个形状为 (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]
或者,shorthand 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))