2016-03-14 240 views
3

我有一個任意維度的Numpy數組和一個包含每個維度的一個數字的索引向量。我希望得到與索引數組中對應於所有維的索引數組中的值相對應的數組的切片,例如,獲取一片numpy的ndarray(用於任意維度)

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]

回答

3

可以切成多個維度一氣呵成:

result = A[:2,:3] 

是切片維度中的一個到索引2和尺寸有兩到索引3

如果你有arbitary尺寸,你也可以創建片的一個tuple

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

切片定義了start(0),stop(所述指定索引)和step(1) - 基本上像range,但可用於索引。並且元組的第i個條目將切片數組的第i個維度。

如果只指定stop -indices你可以使用速記:

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

我建議第一個選項,如果你知道的維數,最後一個,如果你不這樣做。