我的观念恰好相反. 代码会被执行很多遍, 不然, 就不必要写. 被执行很多遍的代码, 需要优化, 极尽能事地优化. 代码量大了时, 要将代码分块:
块间接口要清晰, 块内实现要高效.
被优化的代码, 可能你自己也将看不懂. 那没关系, 你只要能弄明白每一块代码的意图, 而不需要时时让每个人清楚这块代码每行的原理. 不少程序员只是机器, 会解码每行代码, 却不懂合起来的意思, 还责怪别人的代码难懂. 给定代码意图, 只写让所有程序员都理解的代码, 无谓地低效.
如果某人不清楚某块代码的意图, 那是注释的事, 你需要加注释, 以防将来你自己也忘了. 如果某人不清楚某块代码的实现原理, 那是他自己的事. 机器也不懂, 它不需要懂, 它只需要执行. 不懂某块代码的实现原理, 但知道意图, 就很容易重写, 维护问题也就不存在.
自志, 请勿对号入座.
附四年前的代码一段. 估计大部分人不会(立即)清楚这个实现原理, 但清楚意图(仅名字 Single value Linear Regression Analysis 就够了). 当然, 这段还不够高效.
class SLRA: ''' SLRA: Single value Linear Regression Analysis usage: # Initial a SLRA: slra = SLRA(dim) # For every incoming vector x of dimension dim, corresponding # scalar result y, you can add it to the system by: slra.add(x, y) # To get the coefficients: slra.get() ''' def __init__(self, dim, bigo=1.0e12, eps=1.0e-12): self.dim = dim self.P = [[i == j and bigo or 0.0 for i in range(dim)] for j in range(dim)] self.theta = [eps for i in range(dim)] def add(self, x, y): px = [sum([self.P[i][j] * x[j] for j in range(self.dim)]) for i in range(self.dim)] xpx1 = 1.0 + sum([x[i] * px[i] for i in range(self.dim)]) K = [px[i] / xpx1 for i in range(self.dim)] delta = y - sum([x[i] * self.theta[i] for i in range(self.dim)]) for i in range(self.dim): self.theta[i] += K[i] * delta for j in range(self.dim): self.P[i][j] -= K[i]*K[j]* xpx1 def get(self): return self.theta
No comments:
Post a Comment