获得一块numpy ndarray(适用于任意维度)

时间:2016-03-14 20:29:32

标签: 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]]

这种直观的语法类似于A[:index],但由于显而易见的原因,这种方法并不起作用。

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

1 个答案:

答案 0 :(得分:4)

您可以一次切割多个维度:

result = A[:2,:3]

将尺寸1切割到索引2,将尺寸2切割到索引3。

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

slicer = tuple(slice(0, i, 1) for i in index)
result = A[slicer]

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

如果您只指定stop - 索引,则可以使用简写:

slicer = tuple(slice(i) for i in index)

如果您知道尺寸的数量,我会推荐第一个选项,如果您不知道,我会推荐最后一个选项。