【问题标题】:Slicing NumPy array given start and end indices for generic dimensions切片 NumPy 数组给定通用维度的开始和结束索引
【发布时间】:2019-10-07 18:13:01
【问题描述】:

给定一个形状为 (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]

但是没有用。

【问题讨论】:

  • arange 创建数组,以不同的方式索引。

标签: python numpy indexing numpy-ndarray


【解决方案1】:

您可以使用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))

【讨论】:

  • 成功了,谢谢!我用数组而不是元组尝试了完全相同的事情,但它没有用,但这似乎解决了它!
  • np.s_ 在这里并不是真正的简写,是吗? ;^)
  • @PaulPanzer Nah,这里没有保存任何字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2015-02-02
  • 2023-03-23
  • 1970-01-01
  • 2015-10-23
  • 2019-03-02
相关资源
最近更新 更多