#Numpy
numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算。本文主要讲学习Numpy过程中遇到的一个问题,关于numpy.dot()是怎运算的。
##Numpy中多维数组的轴
多维数组可以用numpy包生成,关于多维数组的运算以及定义等自行百度,主要讲多维数组的轴,这也是我学习时不懂的地方。
多维数组的轴(axis)和该数组的size(或者)shape元素对应 。轴数从0开始,如果是二维,0轴是竖行,1轴是横行。具体看代码
1 | x = np.random.randint(0,5,[3,2,2]) |
如果将三维数组的每一个二维看做一个平面(plane,X[0, :, :], X[1, :, :], X[2, :, :]),三维数组即是这些二维平面层叠(stacked)出来的结果。则(axis=0)表示全部平面上的对应位置,(axis=1),每一个平面的每一列,(axis=2),每一个平面的每一行。
#numpy.dot()
numpy.dot(a,b,out=None)
- 如果a和b都是一维数组,则进行内积运算
1 | np.dot(3, 4) |
- 如果都是二维数组,就进行矩阵乘法,推荐
[email protected]
1 | a = [[1, 0], [0, 1]] |
- 如果其中一个矩阵0秩,即标量,就进行
a*b
的运算,相乘 - 如果a是N-D矩阵且b是1-D矩阵,就进行a的最后一个轴上的数据和b相乘并求和
1 | a = array([[[ 1., 2., 3., 4.], |
- 如果都是多维矩阵,则a的最后一个轴和b的倒数第二个轴上的数据乘积累加,类似第四种情况
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
1 | a = np.arange(3*4*5*6).reshape((3,4,5,6)) |