Comment appliquer une fonction aux valeurs d'une colonne d'un tableau numpy ?

Published: 25 septembre 2023

Tags: Python; Numpy;

DMCA.com Protection Status

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