我有一个任意维度的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]
?
答案 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)
如果您知道尺寸的数量,我会推荐第一个选项,如果您不知道,我会推荐最后一个选项。