2013-06-28 53 views
6

所以我有一個大的NumPy的陣列,它採用以下形式:Python從更大的2D NumPy數組創建更小的子數組?

data = [[2456447.64798471, 4, 15.717, 0.007, 5, 17.308, 0.019, 6, 13.965, 0.006], 
     [2456447.6482855, 4, 15.768, 0.018, 5, 17.347, 0.024, 6, 14.001, 0.023], 
     [2456447.648575, 4, 15.824, 0.02, 5, 17.383, 0.024, 6, 14.055, 0.023]] 

我想創建一個子陣列看起來像這樣:

[[4, 15.717, 5, 17.308, 6, 13.965], 
[4, 15.768, 5, 17.347, 6, 14.001], 
[4, 15.824, 5, 17.383, 6, 14.055]] 

基本上我想選擇出的第一列,然後從第4列開始,我想每隔3列選擇一個。我想這出如何與像data[1:6:?]接近這一點,但我不知道如何來逐步且只能得到我想要的列。

另外我需要這對水平延伸的陣列是可擴展的。所以我不只是想對列值進行硬編碼。

回答

3

這將這樣的伎倆,其水平和垂直縮放,很容易和作品。

subArray = [] 
newRow = [] 
for row in data: 
    for i in xrange(0,len(row)): 
     if (i % 3 == 0): 
      continue 
     newRow.append(row[i]) 
    subArray.append(newRow) 
    newRow = [] 
+1

如果您需要這是可擴展的,而不是靜態的尺寸讓我knkow,我可以更改代碼 – Stephan

+0

是的,我試圖讓一些可擴展的,因爲我的實際數據數組在水平和垂直方向上要長得多。如果您擁有可擴展的解決方案,那將非常棒! –

+1

@ sTr8_Struggin完成! – Stephan

7

你可以這樣做:

>>> data[:, [1, 2, 4, 5, 7, 8]] 
array([[ 4. , 15.717, 5. , 17.308, 6. , 13.965], 
     [ 4. , 15.768, 5. , 17.347, 6. , 14.001], 
     [ 4. , 15.824, 5. , 17.383, 6. , 14.055]]) 
+0

這裏發生了什麼,用列表切片符號?爲什麼冒號後有逗號? – Stephan

+0

@Stephan,由於'data'是NumPy的陣列,它可以被用整數索引訪問。該列表也可以是另一個陣列。 [對於它的文檔是在這裏](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#integer)。逗號分隔沿着軸的切片。因此'data [1:2,:]'會選擇第一行和所有的列,而'data [:, 1:2]'會選擇所有的行和第一列。 –

+0

你確定'data [1:2]'沒有得到第二個項目嗎?我認爲slice被索引爲0,所以'data [0:1]'會得到第一個項目 – Stephan