我试图通过参数tiling将以下函数向量化
def find_tile(x,tiling):
"""
Calculates the index of the closest element of 'tiling' to 'x'.
tiling: array of grid positions
x: variable of the same type as the elements of tiling
"""
return np.argmin(np.linalg.norm(tiling - x, axis=1))例如,函数的非向量化版本可以接受以下参数
tiling = np.array( [[i,j] for i in xrange(3) for j in xrange(3)] )
x = np.array([1.2, 2.7])我感兴趣的是找到最快的矢量化,这样x仍然是一个向量,并且我可以传递一个参数列表tiling
因此,我尝试使用生成器定义多个加法:
tilings = (tiling + np.random.uniform(0,1,2) for j in xrange(3))然后使用map和functools.partial
map(functools.partial(find_tile, x=x), tilings)显然,x作为数组或什么的有问题,因为我得到了错误:
Traceback (most recent call last):
File "main.py", line 43, in <module>
inds = map(functools.partial(find_tile, x=x), ts)
TypeError: find_tile() got multiple values for keyword argument 'x'有人能给我解释一下怎么绕过它吗?
另外,是否有其他更快的方法(可能重写函数find_tile)?
发布于 2016-07-25 16:05:46
您将x作为关键字参数传入。map()作为位置参数从tilings传入每个元素。但是,由于第一个位置参数是x,所以这与关键字参数相冲突。使用名称作为关键字参数并不会阻止该名称被一个位置参数填充。
不要为x使用关键字参数,只需将其作为位置参数传递给partial()
map(functools.partial(find_tile, x), tilings)现在,tilings中的每个元素都作为第二个位置参数传入,并且调用工作。
https://stackoverflow.com/questions/38572506
复制相似问题