2012-05-03 63 views
1

我想切片下面的數組獲取第2和第3行,除第2列和最後一列之間的列以外的第一列,但是我嘗試過的每個切片似乎都不起作用。例如,下面的第一個打印語句由於在括號中提供了語法錯誤。我也試圖簡單地連接數組,但我不認爲這是完成這個問題的最有效的方法。Numpy高級切片

import numpy as np 
y = np.arange(35).reshape(5, 7) 

# My ultimate goal is to do a slice similar to this expression, but this of course gives 
# an error. 
print y[[1, 2], [0, 2:-1]] 

# This works, but I feel it is inefficient, although I could be wrong. 
print np.hstack((y[[1, 2], 0][:, np.newaxis], y[[1, 2], 2:-1])) 

任何建議將不勝感激。

回答

2

我不知道這是不是你問什麼,但嘗試

In [11]: y[2:4,[1,3,4,5,6]] 
Out[11]: 
array([[15, 17, 18, 19, 20], 
     [22, 24, 25, 26, 27]]) 

In [12]: 

numpy的可切片類似於標準的Python列表,但尺寸增加一些trickiness,但我仍然覺得這個解決方案是與嵌套或循環重塑相比非常優雅,但有時​​候這並不總是最終全部解決方案。

編輯:

它看起來並不好,但它比重塑或巨大的矩陣更好的改變

這等於說y[1:3, [0, 2:-1]],而無需重塑陣列或通過多餘的元素進行迭代,你通過製作該維度中其餘列的[0] +列表來指定您關心的索引。

In [33]: y[1:3, [0] + list(xrange(2,y.shape[1]))] 
Out[33]: 
array([[ 7, 9, 10, 11, 12, 13], 
     [14, 16, 17, 18, 19, 20]]) 
+0

對不起,我是不夠具體。我需要列2:-1的原因是有時我會在中間有更多的列,但從不在數組的開始或結束。 – hotshotiguana

+0

如果你做'y [2:4,1:-1]',你將有2,3行和所有'內'列。 – lukecampbell

+0

我對原始問題進行了編輯,因爲除了「內部」列以外,還需要第一列。 – hotshotiguana