如何在返回常量值的lambda函数上使用矢量化NumPy操作?

时间:2019-02-11 11:12:15

标签: python numpy lambda vectorization

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

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
            android:fillColor="@color/colorPrimary"
            android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"/>
</vector>

结果是

func = lambda x: 1.
x = np.linspace(0,1,10)
func(x).shape

我期望以下行为:

AttributeError: 'float' object has no attribute 'shape'

func = lambda x: 1. + 0*x
x = np.linspace(0,1,10)
func(x)

如何在不弄乱lambda函数的情况下(即无需编写array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) )获得期望的结果?

背后的想法是,用户将此功能传递给另一个功能,以便在网格上进行进一步评估。我不能期望用户将常数函数设置为func = lambda x: 1. + 0*x。我该怎么办?

2 个答案:

答案 0 :(得分:1)

签出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)

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

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

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

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

答案 1 :(得分:0)

  1. 请勿将lambda用作持久函数。您的

    func = lambda x: 1.
    

    完全相同
    def func(x):
        return 1.
    
  2. 目前尚不清楚您要做什么。您的lambda返回1.0,不遵守传递的参数。请阐明您期望的逻辑。