numpy中多维数组的轴(axis)
2016-01-14 08:49
1476 查看
多维数组的轴(axis=)是和该数组的size(或者shape)的元素是相对应的;
如果将三维数组的每一个二维看做一个平面(plane,X[0, :, :], X[1, :, :], X[2, :, :]),三维数组即是这些二维平面层叠(stacked)出来的结果。则(axis=0)表示全部平面上的对应位置,(axis=1),每一个平面的每一列,(axis=2),每一个平面的每一行。
For 2-D arrays it is equivalent to matrix multiplication,
两个二维数组的dot运算遵循矩阵乘法(其实一个二维一个一维也是矩阵乘法(Ax))
and for 1-D arrays to inner product of vectors (without complex conjugation).
两个一维数组的dot运算执行的是内积运算(对应位相乘相加)
For N dimensions it is a sum product over the last axis of a and the second-to-last of b。
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
a的最后一轴与b的倒数第二轴,(而 np.tensordot 可灵活地指定相互作用的两个矩阵的任意轴)
这不正是著名的 Am×n⋅Bn×p,A 的每一行乘以 B的每一列;
此时如果我们想通过矩阵与向量(一维)内积的方式实现(np.sum(X, axis=0)的结果)需使用np.tensordots(X, [1, 1, 1], axes=([0], [0])),具体的用法见 np.tensordots文档。
我们再来看看如何实现多维数组求平均的动作(每一个二维平面对应位的平均):
>>> 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]])
如果将三维数组的每一个二维看做一个平面(plane,X[0, :, :], X[1, :, :], X[2, :, :]),三维数组即是这些二维平面层叠(stacked)出来的结果。则(axis=0)表示全部平面上的对应位置,(axis=1),每一个平面的每一列,(axis=2),每一个平面的每一行。
考察多维数组的dot运算
numpy.dot(a, b, out=None)
For 2-D arrays it is equivalent to matrix multiplication,
两个二维数组的dot运算遵循矩阵乘法(其实一个二维一个一维也是矩阵乘法(Ax))
and for 1-D arrays to inner product of vectors (without complex conjugation).
两个一维数组的dot运算执行的是内积运算(对应位相乘相加)
For N dimensions it is a sum product over the last axis of a and the second-to-last of b。
dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
a的最后一轴与b的倒数第二轴,(而 np.tensordot 可灵活地指定相互作用的两个矩阵的任意轴)
这不正是著名的 Am×n⋅Bn×p,A 的每一行乘以 B的每一列;
>>> X.dot([1, 1]) array([[7, 6], [4, 5], [2, 1]]) # X的最后一轴是每一个二维的行方向
此时如果我们想通过矩阵与向量(一维)内积的方式实现(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]])
我们再来看看如何实现多维数组求平均的动作(每一个二维平面对应位的平均):
>>> X = np.random.randint(0, 5, [3, 2, 2]) >>> X array([[[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]])
相关文章推荐
- python开发学习-day02(元组、字符串、列表、字典深入)
- Python list 排序
- Python字典
- python几个特别函数map filter reduce lambda
- [python]My Unique JsonDiff算法——如何计算2个json串之间的差距并Diff出来(一):编辑距离(Levenshtein)算法
- python 函数形参四种格式
- numpy数据类型dtype转换
- python2编码总结
- Python实现BWT算法()
- Python 版的 Nmon 分析器:让你远离 excel 宏
- python Django模板的使用方法
- Python2.x与Python3.x的区别
- 5种Python单例模式的实现方式
- Python工程师面试题 与Python基础语法相关
- Python工程师面试题 与Python Web相关
- [python]tkinter布局中的fill、expand与anchor
- Python数值问题的一些问题
- Python图形界面开发初步 2
- 【python学习笔记】浅探编码
- python get、post提交表单(headers)