У меня есть функция с одним из параметров как numpy.ndarray. Он изменен, поэтому он не может быть кэширован lru_cache.Как применить functools.lru_cache для работы с изменяемыми параметрами?
Есть ли существующее решение для этого?
У меня есть функция с одним из параметров как numpy.ndarray. Он изменен, поэтому он не может быть кэширован lru_cache.Как применить functools.lru_cache для работы с изменяемыми параметрами?
Есть ли существующее решение для этого?
Возможно, самым простым способом является сохранение версии, содержащей только неизменяемые объекты.
Скажите, что ваша функция принимает np.array
, и предположим, что это 1-й массив. К счастью, это легко переводится на tuple
:
import numpy as np
a = np.array([1, 2, 3, 4])
>> tuple(a)
(1, 2, 3, 4)
и наоборот:
>> np.array(tuple(a))
array([1, 2, 3, 4])
Таким образом, вы получите что-то вроде
# Function called by the rest of your program
array_foo(a) # `a` is an `np.array`
...
return tuple_foo(tuple(a))
затем memoize вместо этой функции:
# Internal implementation
@functools.lru_cache
tuple_foo(t) # `t` is a tuple
...
a = np.array(t)
Да, я думаю, это сим вдоволь. – iuradz