理解多维矩阵的"求和"、"平均"操作确实太恶心了,numpy提供的函数里还有一堆参数,搞得晕头转向的,这里做个笔记,提醒一下自己, 下面是例程
import numpy as np
X = np.array([[1, 2], [4, 5], [7, 8]])
print np.mean(X, axis=0, keepdims=True)
print np.mean(X, axis=1, keepdims=True)
结果是分别是
[[ 1.5]
[[ 4. 5.]] [ 4.5]
[ 7.5]]
我个人比较raw的认识就是,axis=0,那么输出矩阵是1行,求每一列的平均(按照每一行去求平均);axis=1,输出矩阵是1列,求每一行的平均(按照每一列去求平均)。还可以这么理解,axis是几,那就表明哪一维度被压缩成1。
再举个更复杂点的例子,比如我们输入为batch = [128, 28, 28],可以理解为batch=128,图片大小为28×28像素,我们相求这128个图片的均值,应该这么写
m = np.mean(batch, axis=0)
输出结果m的shape为(28,28),就是这128个图片在每一个像素点平均值。

版权声明:本文为博主原创文章,未经博主允许不得转载。
Numpy简介
Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。其部分功能如下:
①ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。②用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
③用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
④线性代数、随机数生成以及傅里叶变换功能。
⑤用于集成由C、C++、Fortran等语言编写的代码的工具。
创建数组
创建数组最简单的办法是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。以一个列表的转换为例:
数组和标量之间的运算
基本的索引与切片
数组转置和轴对换
转置(transpose)是重塑的一种特殊形式,它返回的是源数据的视图(不会进行复制操作)。
通用函数:快速的元素级数组函数
通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。
用数组表达式代替循环的做法,通常称为矢量化
将条件逻辑表述为数组运算
Numpy.where函数是三元表达式x if condition else y的矢量化版本
数学和统计方法
可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。Sum、mean以及标准差std等聚合计算(aggregation,通常叫做约简(reduction))既可以当做数组的实例方法调用,也可以当做顶级NumPy函数使用:
用于布尔型数组的方法
布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值计数:
排序
跟Python内置的列表类型一样,NumPy数组也可以通过sort方法就地排序(修改数组本身)。
唯一化
用于数组的文件输入输出
Numpy能够读写磁盘上的文本数据或二进制数据。
线性代数
【参考文献】
[1]. 利用Python进行数据分析,wes McKinney著,唐学韬译,2014年,机械工业出版社