采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
()
其中,(X_b.dot(theta)-y).dot(X_b[:,i]),有点疑问。
X_b是(m,n+1)矩阵,theta是(n+1,)行向量,y是(m,)行向量。
这里的np.dot是如何广播的呢?
谢谢bobo老师
不需要进行广播。
X_b是(m,n+1)的矩阵,theta是(n+1,1)的向量,二者dot,X_b.dot(theta)是(m,1)的向量。y也是(m,1)的向量,二者相减依然是(m,1)的向量。
X_b.dot(theta)-y 是一个(m,1)的向量;X_b[:,i]也是一个(m,1)的向量(从X_b中取出第i列),此时dot执行的是两个向量的点乘运算,即对应元素相乘再相加。最终结果是一个数。
之前第三章我印象里提过,numpy中对向量不分行向量和列向量,但是在进行dot运算的时候,可以理解为会自动转换为适应dot运算的向量。在这里,theta和y都应该被看做是(m,1)的列向量。
另外,这个课程中的编码,在矩阵操作的解释上,基本上都不使用广播(虽然内部的运算机制包含广播),换句话说,我希望学习的同学即使不理解广播的概念,也可以读懂编码的运算规则。所以解释的时候可以直接取两个运算对象(矩阵或者向量)进行运算的数学含义。
谢谢bobo老师如此迅速的回复。 X_b.dot(theta)-y 返回的是(m,1)向量 X_b[:,i] 返回的是(m,)向量 他们两者进行dot运算,其中的广播如何进行呢? 再次谢谢bobo老师
抱歉只聊了一半,我在原答案上进行了补充:)
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.5k 19
3.5k 17
3.0k 15
1.6k 15
1.5k 14