为什么这个函子返回浮点数?
<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
。我该怎么办?
答案 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)
请勿将lambda用作持久函数。您的
func = lambda x: 1.
与
完全相同def func(x):
return 1.
目前尚不清楚您要做什么。您的lambda返回1.0
,不遵守传递的参数。请阐明您期望的逻辑。