【发布时间】:2019-01-22 02:39:35
【问题描述】:
下面的例子说明了我的问题:
>>> import numpy as np
>>> l = lambda i, value: i*v
>>> y = np.vectorize(l)
>>> y(range(10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/site-packages/numpy/lib/function_base.py", line 2755, in __call__
return self._vectorize_call(func=func, args=vargs)
File "/usr/local/lib/python3.6/site-packages/numpy/lib/function_base.py", line 2825, in _vectorize_call
ufunc, otypes = self._get_ufunc_and_otypes(func=func, args=args)
File "/usr/local/lib/python3.6/site-packages/numpy/lib/function_base.py", line 2785, in _get_ufunc_and_otypes
outputs = func(*inputs)
TypeError: <lambda>() missing 1 required positional argument: 'value'
>>> y(enumerate(range(10)))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/site-packages/numpy/lib/function_base.py", line 2755, in __call__
return self._vectorize_call(func=func, args=vargs)
File "/usr/local/lib/python3.6/site-packages/numpy/lib/function_base.py", line 2825, in _vectorize_call
ufunc, otypes = self._get_ufunc_and_otypes(func=func, args=args)
File "/usr/local/lib/python3.6/site-packages/numpy/lib/function_base.py", line 2785, in _get_ufunc_and_otypes
outputs = func(*inputs)
TypeError: <lambda>() missing 1 required positional argument: 'value'
有没有像 fromiter 这样的东西支持这一点,但在大输入时速度更快,比如矢量化?
【问题讨论】:
-
第二行中
v和value的区别是故意的还是错字?但除此之外,如果你将l和y定义为两个参数的函数,你为什么要用一个来调用y? -
为什么要在这么简单的功能上使用
vectorize?l有 2 个参数,y也有,一个作为标量源i,另一个作为标量value -
你读过来自
np.vectorize的notes吗? -
抱歉打错了@tif
-
"为什么要在这么简单的函数上使用矢量化?"这个函数其实并不简单,这个函数是为了演示的目的