erogol
erogol

Reputation: 13614

Iterating over Numpy matrix rows to apply a function each?

I want to be able to iterate over the matrix to apply a function to each row. How can I do it for a Numpy matrix ?

Upvotes: 73

Views: 230769

Answers (3)

Saullo G. P. Castro
Saullo G. P. Castro

Reputation: 58885

You can use numpy.apply_along_axis(). Assuming that your array is 2D, you can use it like:

import numpy as np

myarray = np.array([[11, 12, 13],
                    [21, 22, 23],
                    [31, 32, 33]])
def myfunction(x):
    return x[0] + x[1]**2 + x[2]**3

print(np.apply_along_axis(myfunction, axis=1, arr=myarray))
#[ 2352 12672 36992]

Upvotes: 93

hamster ham
hamster ham

Reputation: 749

Here's my take if you want to try using multiprocesses to process each row of numpy array,

from multiprocessing import Pool
import numpy as np

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

if __name__ == '__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 take in a function and an iterable.
I used 'map' function to create an iterator over each rows of the array.
Maybe there's a better to create the iterable though.

Upvotes: 8

matthew-parlette
matthew-parlette

Reputation: 1294

While you should certainly provide more information, if you are trying to go through each row, you can just iterate with a for loop:

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

Upvotes: 78

Related Questions