Il existe différentes méthodes pour utiliser numpy et appliquer une fonction aux valeurs d'une colonne d'un tableau numpy Exemples :
Appliquez une fonction personnalisée à une matrice numpy 2d
Nous avons un tableau appelé ici data.
import numpy as np
data = np.arange(30).reshape((10,3))
print(data)
donne
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]
[15 16 17]
[18 19 20]
[21 22 23]
[24 25 26]
[27 28 29]]
et nous devons appliquer une fonction personnalisée, par exemple.
def myFunc(X):
slope = 2.0
intercept = -4.0
return slope * X + intercept
plus précisément à la deuxième colonne. Pour ce faire, une solution consiste à découper le tableau en utilisant data[:,1] et à appliquer notre fonction :
myFunc(data[:,1])
donne
array([-2., 4., 10., 16., 22., 28., 34., 40., 46., 52.])
Pour modifier directement le tableau de données :
data[:,1] = myFunc(data[:,1])
donne
[[ 0 -2 2]
[ 3 4 5]
[ 6 10 8]
[ 9 16 11]
[12 22 14]
[15 28 17]
[18 34 20]
[21 40 23]
[24 46 26]
[27 52 29]]
Utilisation de la fonction numpy apply_along_axis()
Une autre solution consiste à utiliser la méthode numpy.apply_along_axis(), qui prend trois paramètres:
(1) Une fonction définie par l'utilisateur,
(2) Un indice d'axe (0 pour les lignes et 1 pour les colonnes),
(3) Et le tableau sur lequel la fonction doit être appliquée.
La méthode renvoie un nouveau tableau, après avoir appliqué la fonction spécifiée à tous les éléments du tableau en fonction de l'indice d'axe donné.
np.apply_along_axis(myFunc,1,data)
donne
array([[-4., -2., 0.],
[ 2., 4., 6.],
[ 8., 10., 12.],
[14., 16., 18.],
[20., 22., 24.],
[26., 28., 30.],
[32., 34., 36.],
[38., 40., 42.],
[44., 46., 48.],
[50., 52., 54.]])
Pour appliquer une fonction à une colonne spécifique, utilisez la même méthode.
np.apply_along_axis(myFunc,0,data[:,1])
donne
array([-2., 4., 10., 16., 22., 28., 34., 40., 46., 52.])
Références
Liens | Site |
---|---|
Array creation | numpy.org |
numpy.apply_along_axis | numpy.org |