web-dev-qa-db-fra.com

Itération sur les lignes de la matrice Numpy pour appliquer une fonction chacune?

Je veux pouvoir parcourir la matrice pour appliquer une fonction à chaque ligne. Comment puis-je le faire pour une matrice Numpy?

41
erogol

Utilisez numpy.apply_along_axis(). En supposant que votre matrice soit en 2D, vous pouvez utiliser comme ceci:

import numpy as np
mymatrix = np.matrix([[11,12,13],
                      [21,22,23],
                      [31,32,33]])
def myfunction( x ):
    return sum(x)

print np.apply_along_axis( myfunction, axis=1, arr=mymatrix )
#[36 66 96]
56

Bien que vous deviez certainement fournir plus d'informations, si vous essayez de parcourir chaque ligne, vous pouvez simplement itérer avec une boucle for:

import numpy
m = numpy.ones((3,5),dtype='int')
for row in m:
  print str(row)
54

Voici ce que je pense si vous voulez utiliser plusieurs processus pour traiter chaque ligne du tableau numpy,

from multiprocessing import Pool
import numpy as np

def my_function(x):
    pass     # do something and return something

if __== '__main__':    
    X = np.arange(6).reshape((3,2))
    pool = Pool(processes = 4)
    results = pool.map(my_function, map(lambda x: x, X))
    pool.close()
    pool.join()

pool.map prend en une fonction et un iterable.
J'ai utilisé la fonction 'map' pour créer un itérateur sur chaque ligne du tableau.
Il y a peut-être un meilleur moyen de créer l'itérable, cependant.

4
hamster ham