蟒蛇functools.partial值的参数

蟒蛇functools.partial值的参数

问题描述:

我想在参数tiling向量化以下功能:蟒蛇functools.partial值的参数

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

,然后使用mapfunctools.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' 

有人可以向我解释如何ge在它周围吗?

此外,有没有另一种更快的方式做到这一点(可能重写的功能find_tile?)

您传递x作为关键字参数map()作为位置自变量传递来自tilings的每个元素。但是,由于您的第一个位置参数是x,因此与关键字参数冲突。使用名称作为关键字参数不会阻止相同名称被位置参数填充。

请勿使用关键字参数x;只是通过它作为一个位置参数来partial()

map(functools.partial(find_tile, x), tilings) 

现在从tilings每个元素传递中作为第二个位置参数和呼叫的作品。