首页 > 解决方案 > 为 numpy 数组自动创建切片范围

问题描述

我已经阅读了一些答案,详细说明了如何将多个切片作为索引传递给 numpy 数组,以在数组中选择多个不相邻的范围。
我想不通的是如何自动创建切片,并将切片列表作为索引传递给感兴趣的 numpy 数组。例如,x是一个形状为(100,)的数组,ind是一个索引列表(单调递增)。我想做的如下所示:

slices = [ind[i]:ind[i+1] for i in chosen]

wherechosen是一个列表,其中列出了 中特定值的索引ind。例如,

>>> ind
array([10, 20, 29, 38, 46, 54, 66, 72, 85, 91], dtype=int64)
>>> chosen
array([0, 1, 2, 5, 7], dtype=int64)

所以ind[chosen[3]]:ind[chosen[3]+1] = 54:66。我希望这个想法很清楚。

我能做些什么来实现这一目标?

标签: pythonarraysnumpyslice

解决方案


像这样?我不确定你的切片的开始和结束。例如 20 是第一个的结束和第二个的开始,但这适合您的示例。

slices = [list(range(ind[chosen[i]],ind[chosen[i]+1]+1)) for i in range(len(chosen))]
print(slices)

[[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], [29, 30, 31, 32, 33, 34, 35, 36, 37, 38], [54, 55, 56, 57, 
58, 59, 60, 61, 62, 63, 64, 65, 66], [72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85]]

推荐阅读