Я пытаюсь векторизациями следующей функции над аргументом 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))
, а затем с помощью 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'
Может кто-нибудь объяснить мне, как ge вокруг?
Кроме того, существует альтернативный и более быстрый способ сделать это (возможно, переписав функцию find_tile
?)