采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师您好 我在写代码时候对于dot函数有些不理解,看您对于另一个同学给出的解答是numpy中不区分行列向量,运算时会自动适应dot运算所需要的维度的向量 网上的博客说也会将向量转成相应维度的矩阵进行运算,但是我在对图片中的代码运行时得不到想要的结果,我认为他应该将x中的维度为1x5的向量转成矩阵,然后进行运算得到一个5x5的矩阵。不知道我对于这个dot函数是不是理解的有点问题
同问下,线性回归的向量化一节,这里没有转置操作啊,是为什么?
两个向量之间可以直接点乘。两个向量之间点乘的结果是一个数。向量本身是一维的。所以,对一维向量做专职操作是没有意义的。怎么做都是一维的。对二维数组进行转置才有意义。可以试一下。a = np.array([1, 2])。看一下a.T是什么样子?再试一下,b=np.array([[1, 2]]),再看一下b.T是什么样子?a是一个一维向量;而b是一个二维矩阵,虽然有一个维度是1,是一个1*2的二维矩阵,但是,1*2的二维矩阵不等于一维向量。他们的维数不同,即ndim不同:)
我说的numpy中不区分行列向量,是指,对于numpy的一维数组,是没有行和列的区别的。数组就表示向量。向量就是向量,他是一维的,我们在纸上,不管是横着码这排数字,还是竖着码这排数字,是同样的向量。
但是,对于一排数组,把它做成二维数组,是有区别的。1*n的二维数组,和n*1的二维数组是不一样的。
在你的程序中,reshape操作让y成为了二维数组。此时,他不是向量,是矩阵。虽然一个维度是1,但他还是矩阵,是二维的。
也正是因为如此,可以仔细观察一下,在课程中我的变量名,向量和矩阵是严格区分的。向量用小写,矩阵用大写,就是为了在编程的时候,可以很方便的知道,哪个变量名表示的是向量,哪个变量名表示的是矩阵。
同时,课程的代码,我非常小心的,基本上完全不使用numpy提供的“自动转换”机制(广播机制,为了避免混乱,我在课程中都没有讲),而是使用手动转换机制,将程序表达的式子和数学式子对应上。
一个矩阵和一个向量相乘,在数学上是有定义的;但是,一个向量和一个矩阵相乘,在数学上,是没有定义的。
万幸,对你的程序,numpy的广播机制没有发挥作用,报错了。否则,在一个巨大的程序中,就可能引入了潜在的不必要的bug,这种计算上的bug,可能很难被察觉。
我个人不建议依靠这种“自动转换”机制写代码,除非你是绝对的高手,完全明白自己在干什么,同时,所写的程序确实对性能有非常敏感的要求:)
继续加油!:)
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.4k 19
3.4k 17
2.9k 15
1.6k 15
1.4k 14