2012-01-26 28 views
9

Ho trovato la funzione numpy.apply_along_axis in qualche codice. E non capisco la documentazione a riguardo.cosa fa esattamente numpy.apply_along_axis?

Questo è un esempio della documentazione:

>>> def new_func(a): 
...  """Divide elements of a by 2.""" 
...  return a * 0.5 
>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]]) 
>>> np.apply_along_axis(new_func, 0, b) 
array([[ 0.5, 1. , 1.5], 
     [ 2. , 2.5, 3. ], 
     [ 3.5, 4. , 4.5]]) 

quanto io come pensato che capito la documentazione, avrei aspettato:

array([[ 0.5, 1. , 1.5], 
     [ 4 , 5 , 6 ], 
     [ 7 , 8 , 9 ]]) 

cioè aver applicato la funzione lungo l'asse [1,2,3] che è l'asse in [[1,2,3], [4,5,6], [7,8,9]]

Ovviamente mi sbaglio. Potresti correggermi?

risposta

9

apply_along_axis applica la funzione fornita lungo fette 1D dell'array di input, con le fette prese lungo l'asse specificato. Pertanto, nell'esempio, new_func viene applicato su ogni porzione dell'array lungo il primo asse. Diventa più chiaro se si utilizza una funzione di valori vettoriali, piuttosto che uno scalare, come questo:

In [20]: b = np.array([[1,2,3], [4,5,6], [7,8,9]]) 

In [21]: np.apply_along_axis(np.diff,0,b) 
Out[21]: 
array([[3, 3, 3], 
     [3, 3, 3]]) 

In [22]: np.apply_along_axis(np.diff,1,b) 
Out[22]: 
array([[1, 1], 
     [1, 1], 
     [1, 1]]) 

Qui, numpy.diff viene applicato lungo ogni fetta di primo o secondo asse (grandezza) della matrice di input.

2

La funzione viene eseguita su matrici 1-d lungo l'asse = 0. Puoi specificare un altro asse usando l'argomento "asse". Un uso di questo paradigma è:

np.apply_along_axis(np.cumsum, 0, b) 

La funzione è stata eseguita su ciascuna sottomatrice lungo dimensione 0. Quindi, si intende per funzioni 1D e restituisce una matrice 1D per ogni ingresso 1D.

altro esempio è:

np.apply_along_axis(np.sum, 0, b) 

fornisce un'uscita scalare per una matrice 1-D. Ovviamente si può semplicemente impostare il parametro dell'asse in cumum o sum per fare quanto sopra, ma il punto qui è che può essere usato per qualsiasi funzione 1-D che si scrive.

Problemi correlati