2014-11-20 4 views
8

Se si dispone di un array NumPy, ad esempio 5x3, c'è un modo per decomprimerlo colonna per colonna tutto in una volta per passare a una funzione piuttosto che in questo modo: my_func(arr[:, 0], arr[:, 1], arr[:, 2])?Spacchettare NumPy array per colonna

Tipo di modello *args per elenco disimballaggio ma per colonna.

+0

'np.hsplit (x, x.shape [1])' –

risposta

12

È possibile decomprimere la trasposta della matrice al fine di utilizzare le colonne per i vostri argomenti della funzione:

my_func(*arr.T) 

Ecco un semplice esempio:

>>> x = np.arange(15).reshape(5, 3) 
array([[ 0, 5, 10], 
     [ 1, 6, 11], 
     [ 2, 7, 12], 
     [ 3, 8, 13], 
     [ 4, 9, 14]]) 

Scriviamo una funzione per aggiungere le colonne insieme (normalmente con x.sum(axis=1) in NumPy):

def add_cols(a, b, c): 
    return a+b+c 

Poi siamo hanno:

>>> add_cols(*x.T) 
array([15, 18, 21, 24, 27]) 

array NumPy verranno disimballati lungo la prima dimensione, da qui la necessità di trasporre la matrice.

+0

Esattamente quello di cui avevo bisogno! Grazie! EDIT: scusa non posso ancora su ... –

+0

Nessun problema, felice che sia stato d'aiuto! –

3

numpy.split divide una matrice in più sotto-array. Nel tuo caso, indices_or_sections è 3 dato che hai 3 colonne e axis = 1 dato che stiamo dividendo per colonna.

my_func(numpy.split(array, 3, 1))