Numpy apply_along_axis function Numpy apply_along_axis function numpy numpy

Numpy apply_along_axis function


the *args in the signature numpy.apply_along_axis(func1d, axis, arr, *args) means that there are some other positional arguments could be passed.

If you want to add two numpy arrays elementwise, just use + operator:

In [112]: test_array = np.arange(10)     ...: test_array2 = np.arange(10)In [113]: test_array+test_array2Out[113]: array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

Remove the keywords axis=, arr=, args= should also work:

In [120]: np.apply_along_axis(example_func, 0, test_array, test_array2)Out[120]: array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])


I just want to briefly elaborate on zhangxaochen's answer, in case that helps someone. Let's use an example where we want to greet a list of people with a particular greeting.

def greet(name, greeting):    print(f'{greeting}, {name}!')names = np.array(["Luke", "Leia"]).reshape(2,1)

Since apply_along_axis accepts *args, we can pass an arbitrary number of arguments to it, which in this case will each be passed along to func1d.

Avoiding Syntax Error

In order to avoid a SyntaxError: positional argument follows keyword argument we have to label the argument:

np.apply_along_axis(func1d=greet, axis=1, arr=names, greeting='Hello')

More Than One Additional Argument

If we also had a function that took even more arguments

def greet_with_date(name, greeting, date):    print(f'{greeting}, {name}! Today is {date}.')

we could use it in either of the following ways:

np.apply_along_axis(greet_with_date, 1, names, 'Hello', 'May 4th')np.apply_along_axis(func1d=greet_with_date, axis=1, arr=names, date='May 4th', greeting='Hello')

Note that we don't need to worry about the order of the keyword arguments.