请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,我想问一下return的问题

def fit(self,x_train,y_train):
assert x_train.ndim==1,"only solve 2d problem"
assert len(x_train)==len(y_train),"wrong input"
x_mean=np.mean(x_train)
y_mean=np.mean(y_train)
num=(x_train-x_mean).dot(y_train-y_mean)
d=(x_train-x_mean).dot(x_train-x_mean)
self.a=num/d
self.b=y_mean-self.a*x_mean
return "a is %f , b is %f " % (self.a , self.b )

然后运行jupter报错
in fit(self, x_train, y_train)
14 self.a=num/d
15 self.b=y_mean-self.a*x_mean
—> 16 return "a is %f , b is %f " % (self.a , self.b )
17 def predict(self,x_p):
18 assert x_p.ndim==1,“wrong input”

TypeError: not enough arguments for format string
a和b都有值

正在回答

1回答

liuyubobobo 2019-04-01 15:59:51

在这句return以前,实际打印一下,看看a和b的值都是什么,a和b的值有问题吗?


另外,现代Python,应该使用"a is {} , b is {} ".format(self.a , self.b ) 的形式更安全。%是已过时的写法。如果确认a和b的值没有问题,修改成使用format,看有没有问题?


最后,为了防止Jupyter Notebook记忆了错误状态,如果你确认自己的逻辑没有问题,尝试重启Jupyter Notebook。(Kernel -> Restart and Run all)

https://img1.sycdn.imooc.com//szimg/5ca1c4b0000102a904930235.jpg


==========


这个课程的所有代码,都可以通过课程的官方github获得。也可以通过慕课网内的代码仓获得。传送门:https://git.imooc.com/coding-169/coding-169 


具体的代码遇到问题,可以先尝试在你的环境下运行课程的官方代码,看是否有同样的问题。如果没有问题,可以仔细比对调试一下,看看自己的代码问题在哪里:)


继续加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 会边缘ob的码农 #1
    老师,我在jupter里单独运行"a is %f , b is %f " % (self.a , self.b )可以返回正确的ab数值结果,但放到函数里就会报错了
    回复 有任何疑惑可以回复我~ 2019-04-01 18:51:46
  • liuyubobobo 回复 提问者 会边缘ob的码农 #2
    所以你需要在函数里面打印一下a, b的值,看一下根据你的传参,函数里的a, b是什么?是不是计算过程或者传参过程产生了什么bug?或者把整个fit函数的逻辑拆开,一行一行运行,看看哪里出现了问题。你需要debug一下:)
    回复 有任何疑惑可以回复我~ 2019-04-02 00:17:41
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信