我有很多方法,它们彼此独立,但需要一起计算输出。因此,当任何方法中的一个变量发生变化时,所有方法都会在计算中调用,这既慢又昂贵。以下是我所拥有的快速pesudo代码:
# o represents an origin variable
# valueA represents a variable which can change
def a (o, valueA):
# calculations
return resultA
def b (o, valueB):
# calculations
return resultA
def c (o, valueC1, valueC2):
# calculations
return resultA
def compute (A, B, C1, C2):
one = self.a(o, A)
two = self.b(one,B)
three = self.c(two, C1, C2)
return img
例如,当C1的值改变时,当调用compute
时,尽管a
&;b
没有改变,所有的方法都被计算出来。我想要的是某种方法来检查A,B,C1,C2
的值在每次调用compute
之间发生了变化。你知道吗
我考虑过定义一个值列表,然后在下一次调用中将其与传递给compute
的新值进行比较。例如,第一次调用:list=[1,2,3,4]
第二次调用list=[1,3,4,5]
所以b
&;c
需要计算,但a
是相同的。但是,我不确定如何从比较到定义要调用的方法?你知道吗
我的特定应用程序的一些背景知识,以备使用。我有一个带滑块的wxPython窗口,用于确定图像处理的值,并在这些滑块的每次更改上绘制图像。你知道吗
将每个调用与compute
进行比较并删除这些浪费的重复计算的最佳方法是什么?你知道吗
如果我必须解决这个问题,我会使用一个字典,其中键是valueX(或者一个列表,如果有多个,在您的示例C中),值应该是函数的结果。你知道吗
所以,你应该有这样的东西:
为此,必须在函数中添加:
并且,在计算的函数中,可以尝试获取参数的值,如果没有获取值,则进行计算
这是@holdenweb在评论中指出的memoize函数的“粗糙”实现。你知道吗
您可以考虑使方法^{} 使用dict来查找以前存储的计算结果(可能在类名称空间中是最好的,以允许在所有实例中优化memoizing)。你知道吗
但是,如果使用许多参数调用这些方法,那么内存需求可能会非常严重,在这种情况下,您可能希望采用"publish and subscribe"模式来尝试使您的计算更“收缩”(松散地由数据中的变化驱动)。你知道吗
这是两种方法。我相信我会想得更多。你知道吗
相关问题 更多 >
编程相关推荐