Python中向np.poly1d实例传参test_ftr的逻辑问题
问题解答
为什么model_one可以直接传入参数调用?
这是因为Numpy的np.poly1d类实现了Python的**__call__魔法方法**:在Python的语法规则里,只要自定义类实现了__call__方法,该类的实例就可以像普通函数一样被调用,调用时传入的参数会自动交给__call__方法处理。
test_ftr被传入到哪个逻辑执行?
你调用model_one(test_ftr)本质等价于执行model_one.__call__(test_ftr),这部分的执行逻辑完全由Numpy内置在poly1d类中:
- 你通过
np.polyfit(train_ftr, train_tgt, 1)得到一阶多项式的系数数组(按x幂次从高到低排列,一阶对应[斜率, 截距]),np.poly1d初始化时已经把这组系数存储在实例内部 __call__方法接收到test_ftr数组后,会对数组内的每一个元素,用预存的多项式系数做求值计算:对一阶多项式来说就是y = 斜率 * x + 截距- 所有元素的计算结果会组装成和
test_ftr形状一致的numpy数组返回,就是你拿到的preds_one
你可以自己做个简单验证:打印model_one.coef拿到系数后手动计算任意输入的结果,和直接调用model_one(输入值)的结果完全一致。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

