python - 给定通用维度的开始和结束索引,对 NumPy 数组进行切片

标签 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 进行切片: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/

相关文章:

MySQL 5.7 中忽略 INNODB 表计数查询的索引

python - PyQt 导入错误

python - 如何在构造函数中设置 ElementTree 元素文本字段

python - 一次性处理 django View 中的所有模板问题

使用 rtree 和普通索引的 SQLite 查询速度慢

python list - 转换为列表列表

python - 如何根据列条件重命名 pandas DataFrame 索引

python - 查找 numpy float 组的交集

python-2.7 - 来自两列的 Pandas 数据框类别代码

python - 将函数应用于 python-pandas 中的数据框时出现 ValueError