如何对返回常量值的 lambda 函数使用向量化 NumPy 运算?

-1 python lambda numpy vectorization

为什么这个函数返回浮点数?

func = lambda x: 1.
x = np.linspace(0,1,10)
func(x).shape
Run Code Online (Sandbox Code Playgroud)

结果是

func = lambda x: 1.
x = np.linspace(0,1,10)
func(x).shape
Run Code Online (Sandbox Code Playgroud)

我期望以下行为:

func = lambda x: 1. + 0*x
x = np.linspace(0,1,10)
func(x)
Run Code Online (Sandbox Code Playgroud)

array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
Run Code Online (Sandbox Code Playgroud)

如何在不干扰 lambda 函数的情况下获得预期结果(即无需编写func = lambda x: 1. + 0*x)?

背后的想法是用户将此函数传递给另一个函数以在网格上进一步评估。我不能指望用户将常量函数设置为1 + 0*x。我应该怎么办?

Nih*_*eth 5

查看numpy.vectorize方法: http://docs.scipy.org/doc/numpy-1.10.1/reference/ generated/numpy.vectorize.html

func = lambda x: 1.
x = np.linspace(0,1,10)
x_func = np.vectorize(func)
x_func(x)
Run Code Online (Sandbox Code Playgroud)

返回:array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

尽管假设您的问题只是想创建一个 1*10 长度的数组,初始化为1.

为什么不使用np.full(10, 1.)

https://docs.scipy.org/doc/numpy-1.15.1/reference/ generated/numpy.full.html