请稍等 ...
×

采纳答案成功!

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

关于dot函数

老师您好
我在写代码时候对于dot函数有些不理解,看您对于另一个同学给出的解答是numpy中不区分行列向量,运算时会自动适应dot运算所需要的维度的向量 网上的博客说也会将向量转成相应维度的矩阵进行运算,但是我在对图片中的代码运行时得不到想要的结果,我认为他应该将x中的维度为1x5的向量转成矩阵,然后进行运算得到一个5x5的矩阵。不知道我对于这个dot函数是不是理解的有点问题http://img1.sycdn.imooc.com//szimg/5d0a703a0001c78410000750.jpg

正在回答 回答被采纳积分+3

2回答

weixin_慕少409219 2019-06-20 12:15:24

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

同问下,线性回归的向量化一节,这里没有转置操作啊,是为什么?

0 回复 有任何疑惑可以回复我~
  • 两个向量之间可以直接点乘。两个向量之间点乘的结果是一个数。向量本身是一维的。所以,对一维向量做专职操作是没有意义的。怎么做都是一维的。对二维数组进行转置才有意义。可以试一下。a = np.array([1, 2])。看一下a.T是什么样子?再试一下,b=np.array([[1, 2]]),再看一下b.T是什么样子?a是一个一维向量;而b是一个二维矩阵,虽然有一个维度是1,是一个1*2的二维矩阵,但是,1*2的二维矩阵不等于一维向量。他们的维数不同,即ndim不同:)
    回复 有任何疑惑可以回复我~ 2019-06-20 14:03:49
liuyubobobo 2019-06-20 01:47:16

我说的numpy中不区分行列向量,是指,对于numpy的一维数组,是没有行和列的区别的。数组就表示向量。向量就是向量,他是一维的,我们在纸上,不管是横着码这排数字,还是竖着码这排数字,是同样的向量。


但是,对于一排数组,把它做成二维数组,是有区别的。1*n的二维数组,和n*1的二维数组是不一样的。


在你的程序中,reshape操作让y成为了二维数组。此时,他不是向量,是矩阵。虽然一个维度是1,但他还是矩阵,是二维的。


也正是因为如此,可以仔细观察一下,在课程中我的变量名,向量和矩阵是严格区分的。向量用小写,矩阵用大写,就是为了在编程的时候,可以很方便的知道,哪个变量名表示的是向量,哪个变量名表示的是矩阵。


同时,课程的代码,我非常小心的,基本上完全不使用numpy提供的“自动转换”机制(广播机制,为了避免混乱,我在课程中都没有讲),而是使用手动转换机制,将程序表达的式子和数学式子对应上。


一个矩阵和一个向量相乘,在数学上是有定义的;但是,一个向量和一个矩阵相乘,在数学上,是没有定义的。


万幸,对你的程序,numpy的广播机制没有发挥作用,报错了。否则,在一个巨大的程序中,就可能引入了潜在的不必要的bug,这种计算上的bug,可能很难被察觉。


我个人不建议依靠这种“自动转换”机制写代码,除非你是绝对的高手,完全明白自己在干什么,同时,所写的程序确实对性能有非常敏感的要求:)


继续加油!:)

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信