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.