第4章 Numpy入门
基础
data = np.arange(10) :生成一个一维数组
data = np.array( [ [1,2,3,4],[5,6,7,8] ] ) 生成一个多维数组
data = np.arange(32).reshape((8,4))
data.shape
data.dtype
data.ndim
data.zeros((3,6))
3. 索引
(1) 切片索引。是原始数据的视图,修改切片,原始数据同样会被修改
若想要复制,则为:data[5:8].copy()
(2) 花式索引,data[ [1,5,7,2], [ 0,3,1,2] ] 为 data[1,5], data[5,3], data[7,1], data[2,2] 的数组。花式索引总是一维的。
(3) 布尔型索引 P133
4. !=,==,|,&,~ 反转条件:data[~(names != ‘Bob’)],负数索引
5. 转置
(1) data.T 转置,data.dot计算矩阵内积
(2) 高维数组转置,data.transpose() 费脑子
数据处理
-
通用函数ufunc
(1) 一元ufunc:np.sqrt(data) , np.exp(data)
(2) 二元ufunc:np.add(x,y) , np.maximum(x,y)
(3) x, y = np.modf(data):返回浮点数数组的小数和整数部分
(4) 接受out选项参数,可以在数组的原地进行操作
-
用数组表达式代替循环的做法,通常被称为 矢量化
-
np.meshgrid() 生成网格点坐标矩阵,p145
针对X的每一行都一样,Y的每一列都一样的这种强烈的规律性,numpy提供的numpy.meshgrid()函数可以让我们快速生成坐标矩阵X,Y
语法:X,Y = numpy.meshgrid(x, y)
输入的x,y,就是网格点的横纵坐标列向量(非矩阵)
输出的X,Y,就是坐标矩阵
-
表现条件逻辑 p147
numpy.where : 三元表达式 x if codition else y 的矢量化版本
result = np.where (cond, xarr, yarr) :当cond中的值为True时,选取xarr的值,否则为yarr的值。
注意:xarr和yarr可以不必是数组,可以是标量值 -
聚合计算
np.sum(a, axis = 1) / a.sum(axis = 1),计算行的平均值
np.mean(a, axis = 0),计算列的平均值
mean和average都是计算均值的函数,在不指定权重的时候average和mean是一样的。指定权重后,average可以计算一维的加权平均值。
-
布尔型数组可用于计算
bools = np.array([false, false, true, false])
bools.any() --> True,检查数组中是否存在一个或多个True
bools.all() --> False,检查数组中所有值是否都是True -
np.unique,找出数组中的唯一值并返回已排序的结果
ints = np.array( [ 3, 3, 3, 2, 2, 1, 1, 4, 4 ] )
np.unique( ints ) --> array[ 1, 2, 3, 4 ]
values = np.array( [ 6, 0, 0, 3, 2, 5, 6] )
np.in1d( values , [2, 3, 6] ) --> array( [ true, false, false, true, true, false, true ] )
- numpy.random模块是对python内置的random的补充 P159
线性代数
- x.dot(y) = np.dot(x,y)
- @符,x @ np.ones([ 6. , 15. ])
- numpy.linalg 行业标准线性代数库,如BLAS、LAPACK、lntel MKL(Math Kernel Library)