numpy中多维数组的轴 axis

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                       

多维数组的轴(axis=)是和该数组的size(或者shape)的元素是相对应的;

>>> np.random.seed(123)>>> X = np.random.randint(0, 5, [3, 2, 2])>>> print(X)[[[5 2]  [4 2]] [[1 3]  [2 3]] [[1 1]  [0 1]]]>>> X.sum(axis=0)array([[7, 6],       [6, 6]])>>> X.sum(axis=1)array([[9, 4],       [3, 6],       [1, 2]])>>> X.sum(axis=2)array([[7, 6],       [4, 5],       [2, 1]])
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

如果将三维数组的每一个二维看做一个平面(plane,X[0, :, :], X[1, :, :], X[2, :, :]),三维数组即是这些二维平面层叠(stacked)出来的结果。则(axis=0)表示全部平面上的对应位置,(axis=1),每一个平面的每一列,(axis=2),每一个平面的每一行。

考察多维数组的dot运算

numpy.dot(a, b, out=None)
   
   
  • 1
  • For 2-D arrays it is equivalent to matrix multiplication,

    两个二维数组的dot运算遵循矩阵乘法(其实一个二维一个一维也是矩阵乘法(Ax的每一列;

>>> X.dot([1, 1])array([[7, 6],       [4, 5],       [2, 1]])                           # X的最后一轴是每一个二维的行方向
   
   
  • 1
  • 2
  • 3
  • 4
  • 5

此时如果我们想通过矩阵与向量(一维)内积的方式实现(np.sum(X, axis=0)的结果)需使用np.tensordots(X, [1, 1, 1], axes=([0], [0])),具体的用法见 np.tensordots文档

>>> np.tensordots(X, [1, 1, 1], axes=([0], [0]))array([[7, 6],       [6, 6]])
   
   
  • 1
  • 2
  • 3
  • 4

我们再来看看如何实现多维数组求平均的动作(每一个二维平面对应位的平均):

>>> X = np.random.randint(0, 5, [3, 2, 2])>>> Xarray([[[3, 4],        [2, 2]],       [[3, 4],        [2, 3]],       [[2, 1],        [1, 3]]])>>> np.tensordot(X, [1/3, 1/3, 1/3], axes=([0], [0]))array([[ 2.66666667,  3.        ],       [ 1.66666667,  2.66666667]])
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/hftytf/article/details/83759744