获取切片的numpy ndarray(用于人为维度)

Mol*_*usq 5 python arrays numpy multidimensional-array

我有一个任意维度的Numpy数组,以及一个索引向量,其中每个维度包含一个数字。我想获得与索引集相对应的数组切片,小于所有维度的索引数组中的值,例如

A = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [9,10,11,12]])
index = [2,3]

result = [[1,2,3],
          [5,6,7]]
Run Code Online (Sandbox Code Playgroud)

直观的语法类似于A[:index],但这由于明显的原因而无法使用。

如果数组的尺寸是固定的,我可以写A[:index[0],:index[1],... :index[n]]; 我可以使用某种列表理解A[:i for i in index]吗?

MSe*_*ert 5

您可以一次切片多个尺寸:

result = A[:2,:3]
Run Code Online (Sandbox Code Playgroud)

将维度1扩展到索引2,将维度2扩展到索引3。

如果您有任意尺寸,也可以创建一个tuple切片:

slicer = tuple(slice(0, i, 1) for i in index)
result = A[slicer]
Run Code Online (Sandbox Code Playgroud)

切片定义start(0),stop(您指定的索引)和step(1)-基本上像range但可用于索引。元组的第i个条目将切片数组的第i个维度。

如果仅指定stop-indices,则可以使用速记:

slicer = tuple(slice(i) for i in index)
Run Code Online (Sandbox Code Playgroud)

如果您知道尺寸的数量,我建议第一个选择,如果您不知道尺寸,则建议最后一个。