2013-06-28 19 views
6

Così ho una vasta gamma NumPy che prende la forma seguente:Python crea un sotto-array più piccolo da un array NumPy 2D più grande?

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]] 

Voglio creare un sub-array che assomiglia a questo:

[[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]] 

Fondamentalmente voglio per selezionare la prima colonna , e quindi a partire dalla 4a colonna voglio selezionare ogni 3a colonna. Ho cercato di capire come affrontare questo con qualcosa come data[1:6:?] ma non ho capito come passare e ottenere solo le colonne che volevo.

Inoltre, ho bisogno che questo sia scalabile per una matrice che si estende orizzontalmente. Quindi non voglio solo codificare i valori delle colonne.

risposta

3

Questo farà il trucco, è scalabile orizzontalmente e verticalmente ed è facile e funziona.

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

se avete bisogno di questo per essere scalabile e non staticamente dimensionato fatemi knkow e posso modificare il codice – Stephan

+0

Sì stavo cercando di fare qualcosa scalabile perché il mio attuale l'array di dati è molto più lungo sia in orizzontale che in verticale. Se hai una soluzione scalabile sarebbe fantastico! –

+1

@ sTr8_Struggin Fatto! – Stephan

7

Si potrebbe fare questo:

>>> 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

cosa sta succedendo qui, affettare notazione con una lista? e perché c'è una virgola dopo il colon? – Stephan

+0

@Stephan, poiché 'data' è un array NumPy, a cui è possibile accedere con l'indicizzazione di numeri interi. Anche la lista può essere un'altra matrice. [I documenti per questo sono qui] (http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#integer). La virgola separa l'affettatura lungo gli assi. Quindi 'data [1: 2,:]' selezionerebbe la prima riga e tutte le colonne, mentre 'data [:, 1: 2]' selezionerebbe tutte le righe e la prima colonna. –

+0

sei sicuro che 'data [1: 2]' non ottiene il secondo elemento? Ho pensato che la slice fosse 0 indicizzata in modo che 'data [0: 1]' ottenesse il primo elemento – Stephan

Problemi correlati