首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有固定数组值参数的python functools.partial

具有固定数组值参数的python functools.partial
EN

Stack Overflow用户
提问于 2016-07-25 16:01:05
回答 1查看 518关注 0票数 0

我试图通过参数tiling将以下函数向量化

代码语言:javascript
复制
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))

例如,函数的非向量化版本可以接受以下参数

代码语言:javascript
复制
tiling = np.array( [[i,j] for i in xrange(3) for j in xrange(3)] )
x = np.array([1.2, 2.7])

我感兴趣的是找到最快的矢量化,这样x仍然是一个向量,并且我可以传递一个参数列表tiling

因此,我尝试使用生成器定义多个加法:

代码语言:javascript
复制
tilings = (tiling + np.random.uniform(0,1,2)  for j in xrange(3))

然后使用mapfunctools.partial

代码语言:javascript
复制
map(functools.partial(find_tile, x=x), tilings)

显然,x作为数组或什么的有问题,因为我得到了错误:

代码语言:javascript
复制
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)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-25 16:05:46

您将x作为关键字参数传入。map()作为位置参数从tilings传入每个元素。但是,由于第一个位置参数是x,所以这与关键字参数相冲突。使用名称作为关键字参数并不会阻止该名称被一个位置参数填充。

不要为x使用关键字参数,只需将其作为位置参数传递给partial()

代码语言:javascript
复制
map(functools.partial(find_tile, x), tilings)

现在,tilings中的每个元素都作为第二个位置参数传入,并且调用工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38572506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档