假设我有一个NumPy一维数组a:
a = np.array([1, 2, 3])
我有一个函数foo:
def foo(x, p):
...
return y
我想在a上应用foo,比如p从1到3来创建一个2d数组。
# # #还是:
>>> a[:, None] ** np.arange(1, 4)
array([[ 1, 1, 1],
[ 2, 4, 8],
[ 3, 9, 27]], dtype=int32)
>>>
一个函数:
def foo(x, p):
return x ** p
np.apply_along_axis(lambda x: foo(x, np.arange(1, 4)), 1, a[:, None])
array([[ 1, 1, 1],
[ 2, 4, 8],
[ 3, 9, 27]], dtype=int32)
###你在评论中说you want to give both arguments to function
For this purpose you can use为此,您可以使用map
and functools
li和functools
like像下图:
from functools import partial
a = np.array([1, 2, 3])
def foo(x,y,z):
return list(z ** y + x)
list(map(partial(foo, z=a), range(1,4), range(1,4)))
输出:
[
[3, 4, 5], # [1,2,3]**1+1
[3, 6, 11], # [1,2,3]**2+2
[3, 10, 29] # [1,2,3]**3+3
]
# # #首先numpy
module suppormodule支持math函数,所以如果你想在数组中应用math函数,你只需要把它写成普通函数或lambda函数,然后将它应用到你的数组中。例如:
def foo(x,p):
return numpy.power(x,p)
注意:这些在numpy模块中更加数学化的函数。试着看看它们:)。