Python/Numpy中的矩阵向量的广播(Broadcasting)特性

在进行机器学习、神经网络的变成过程当中,基本上是一定会使用到矩阵或者向量的,但是如果不了解Python/Numpy中的矩阵或者向量的特性,则会经常出现一些自己意想不到的bug,并且调试起来非常困难。

下面我们就来看看它们有哪些特性。

一、首先我们先一起了解一下Python/Numpy中的广播(Broadcasting)特性

在python或者Numpy中,如果你用一个向量 和一个 常数相加,会有什么效果? 如下面的例子:

Python/Numpy中的矩阵向量的广播(Broadcasting)特性_第1张图片

系统不会因为维度不一致而报错,而是自动把常数100扩展成一个3行1列的矩阵,然后再进行相加,也就相当于:

Python/Numpy中的矩阵向量的广播(Broadcasting)特性_第2张图片

这其实就是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)的矩阵进行预算,系统会怎么处理呢?

Python/Numpy中的矩阵向量的广播(Broadcasting)特性_第3张图片

没错,系统会报错:ValueError: operands could not be broadcast together with shapes (3,3) (2,2)

相信您已经对Python/Numpy的广播(Broadcasting)特性有所了解了。这种特性,虽然可以让编程更为灵活简洁,但是如果没有掌握好这种特性,也经常会因此而产生难以察觉的bug,在编程过程中需要多加注意。

 

你可能感兴趣的:(Python,神经网络)