タイトルは多かれ少なかれそれをすべて言います:
対称入力を 2 つの引数で受け取る関数があります。たとえば、次のようなものです。
def f(a1, a2):
return heavy_stuff(abs(a1 - a2))
ここで、キャッシングの方法をいくつか紹介したいと思います。次のようなことを行うのは正しい/ pythonic /合理的に効率的でしょうか:
cache = {}
def g(a1, a2):
fs =frozenset((tuple(a1), tuple(a2)))
if fs not in cache:
cache[fs] = f(a1, a2)
return cache[fs]
それとももっと良い方法があるでしょうか?
編集: a1 と a2 は、numpy 配列の行である可能性があります。そのため、それらをそれぞれタプルでラップします。