python numpy向量化函数中是否有使用索引的方法?

python numpy向量化函数中是否有使用索引的方法?,python,numpy,iterable,Python,Numpy,Iterable,下面的示例说明了我的问题: >>> 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

下面的示例说明了我的问题:

>>> 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'
>>将numpy作为np导入
>>>l=λi,值:i*v
>>>y=np.矢量化(l)
>>>y(射程(10))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python3.6/site packages/numpy/lib/function_base.py”,第2755行,在调用中__
返回self.\u矢量化\u调用(func=func,args=vargs)
文件“/usr/local/lib/python3.6/site packages/numpy/lib/function_base.py”,第2825行,在矢量化调用中
ufunc,otypes=self.\u获取\u ufunc\u和\u otypes(func=func,args=args)
文件“/usr/local/lib/python3.6/site packages/numpy/lib/function_base.py”,第2785行,位于get_ufunc_和otypes中
输出=函数(*输入)
TypeError:()缺少1个必需的位置参数:“值”
>>>y(枚举(范围(10)))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python3.6/site packages/numpy/lib/function_base.py”,第2755行,在调用中__
返回self.\u矢量化\u调用(func=func,args=vargs)
文件“/usr/local/lib/python3.6/site packages/numpy/lib/function_base.py”,第2825行,在矢量化调用中
ufunc,otypes=self.\u获取\u ufunc\u和\u otypes(func=func,args=args)
文件“/usr/local/lib/python3.6/site packages/numpy/lib/function_base.py”,第2785行,位于get_ufunc_和otypes中
输出=函数(*输入)
TypeError:()缺少1个必需的位置参数:“值”

是否有类似ITER的
支持此功能,但在大输入时速度更快,如矢量化?

您可以借助
itertools.count

import numpy as np
from itertools import count

i = count(-1)
l = lambda value: next(i) * value
y = np.vectorize(l)

print(y(range(10)))
# [ 0  1  4  9 16 25 36 49 64 81]

np.vectorize
只是一个循环,将函数应用于iterable中的每个值。给定一个iterable,它应该不会比通过
map
+
enumerate
将函数顺序应用于每个项更有效。然后可以将
映射
对象馈送到
np.fromiter

var = range(10)
indexed = enumerate(var)

def foo(x):
    idx, val = x
    return idx * val

res = np.fromiter(map(foo, indexed), dtype=int)

print(res)

[ 0  1  4  9 16 25 36 49 64 81]

第二行中的
v
value
是故意的还是打字错误?但是独立于此,如果将
l
y
定义为两个参数函数,为什么要用一个参数调用
y
?为什么要对这样一个简单的函数使用
vectorize
l
接受两个参数,
y
也接受,一个作为scalar
i
的源,另一个作为scalar
value
你读了
np.vectorize
中的
注释了吗?很抱歉,这是一个输入错误@tif“为什么在这么简单的函数上使用矢量化?”该函数实际上并不简单,此函数用于演示此函数一般不起作用,例如,对于生成器,请尝试使用
y((范围(10)中的i代表i))