我的Python类有一些变量需要工作来计算第一次调用它们.后续调用应该只返回预先计算的值.
我不想浪费时间做这项工作,除非用户实际需要它们.那么有一个干净的Pythonic方法来实现这个用例吗?
我最初的想法是使用property()来第一次调用函数,然后覆盖变量:
class myclass(object):
def get_age(self):
self.age = 21 # raise an AttributeError here
return self.age
age = property(get_age)
Run Code Online (Sandbox Code Playgroud)
谢谢
假设我们有一个这样的程序:
list = [1..10000000]
main = print $ sum list
Run Code Online (Sandbox Code Playgroud)
我想要编译这样,可执行文件只打印50000005000000,而不需要花费太多时间和精力.
基本上,任何可以确定计算的表达式(也许严格性分析可以在这里帮助)都可以在编译期间预先计算(即我们使用参考透明度来表示在计算值时它并不重要).
简而言之:"必须计算"+参考 - 透明度=可以预先计算
这就像运行程序,直到我们点击依赖于输入的东西(即程序的核心,在所有输入中共同的,将被预先计算)
是否存在当前实现此目的的机制(使用Haskell或任何其他语言)?[请不要指向C++中的模板之类的东西,因为它首先没有引用透明度.]
如果没有,这个问题有多难?[伴随的技术(和理论)问题是什么?]
我使用预先计算的指标使用 Scikit-Learn 的最近邻/半径分类。这意味着,我将成对距离的 n_samples_train x n_samples_train 矩阵传递给分类器的拟合方法。
现在我想知道为什么必须这样做。使用 knn 学习只是意味着“存储样本”,但距离的计算应该只在稍后的泛化过程中进行(在该步骤中,我当然会计算训练样本和测试样本之间的距离矩阵,因此大小为 n_samples_train x n_samples_test 的矩阵)。
例如,在 SVM 的情况下,我将一个预先计算的矩阵(Gramian,一个相似性矩阵)传递给 smv.SVC 对象的 fit 方法。然后进行优化,找到支持向量等等。在那里,该矩阵在训练期间是绝对必要的。
但是我看不出为什么需要一个预先计算的矩阵来拟合邻居/半径分类。
有人可以给我一个相关的提示吗?
我很想跳过使用 scikit learn 计算 knn 的训练矩阵。
最好的问候和谢谢。:-)