在进行机器学习、神经网络的变成过程当中,基本上是一定会使用到矩阵或者向量的,但是如果不了解Python/Numpy中的矩阵或者向量的特性,则会经常出现一些自己意想不到的bug,并且调试起来非常困难。
下面我们就来看看它们有哪些特性。
一、首先我们先一起了解一下Python/Numpy中的广播(Broadcasting)特性
在python或者Numpy中,如果你用一个向量 和一个 常数相加,会有什么效果? 如下面的例子:
系统不会因为维度不一致而报错,而是自动把常数100扩展成一个3行1列的矩阵,然后再进行相加,也就相当于:
这其实就是python/Numpy的广播特性了,再看一个例子,看看下面这个矩阵算是,Python会怎么处理?
我想你一定猜到了,就是将第二个1行3列的矩阵,自动扩展成2行3列,然后再进行计算,如下:
再举一个例子,因为逻辑非常类似,我就直接给答案了^_^:
总结一下,如果一个m*n的矩阵和一个m*1的矩阵做运算,在Python/Numpy中,会自动把第二个矩阵扩展为m*n之后,再进行运算;同理,如果以个m*n的矩阵和一个1*n的矩阵做运算,系统也会自动把第二个矩阵扩展为m*n。
那可能很多同学看到这里,不禁会问,如果是一个m*n的矩阵和一个x*y (m<>x,n <> y)的矩阵进行预算,系统会怎么处理呢?
没错,系统会报错:ValueError: operands could not be broadcast together with shapes (3,3) (2,2)
相信您已经对Python/Numpy的广播(Broadcasting)特性有所了解了。这种特性,虽然可以让编程更为灵活简洁,但是如果没有掌握好这种特性,也经常会因此而产生难以察觉的bug,在编程过程中需要多加注意。