第4章 Numpy基础:数组与向量化计算
本章知识小结:
- 1、ndarryN维数组、np.arange(100) (更优)、list(range(100))、np.random.randn(2,3)、np.array(data)
- 2、data.ndim、data.shape、data.dtype
- 3、np.ones、ones_like、zeros、empty、full([3,3],2)、asarry、eye、identity
- 4、i1、u1、i2、u2、i4、u4、i8、u8、 f2、f4 或 f、f8 或 d、f16 或 g、c8、c16、c32 、?、O、S、U
- 5、向量化(同尺寸数组逐元素比较)、切片、布尔索引用|&(and、or没用)
- 6、神奇索引、arr[[4,3,0,6]]、arr[[-3,-5,-7]]、arr[[1,2,3],[1,2,3]]、arr[[1,5,7,2]][:,[0,3,1,2]]
- 7、转置换轴、arr.T、arr.swapaxes(0,1)、arr.transpose((1,0))
- 8、ufunc、向量化封装、一元np.add、subtract除、multiply、divide除、floor_divide整除、power次幂、maximun、fmax
- 9、minimun、fmin、mod求模、copysign改符号值、greater、greater_equal、less、less_equal、euqal、not_equal逐个比较返回布尔数组
- 10、arccos、arccosh、arcsin、arcsinh、arctan、arctanh、logical_not对数组的元素按位取反
- 11、二元add、subtract除、multiply、divide除、floor_divide整除、power次幂、maximun、fmax、minimun、fmin(忽略NaN)
- 12、mod求模、copysign改符号值、greater、greater_equal、less、less_equal、euqal、not_equal逐个比较返回布尔数组
- 13、logical_and、logical_or、logical_xor异或
- 14、接收n维数组xs , ys = np.meshgrid(points,points)、 np.where(condition,xarr,yarr)
- 15、sum、mean、std标准差、var方差、min、max、argmin最小值位置、argmax、cumsum从0开始累计和、cumpord从1开始累计积
- 16、np.unique(arr) 等价于 sorted(set(str))、 np.in1d(x,y) x中元素是否包含在y中,返回布尔数组intersect1d(x,y) 交集排序
- 17、union1d(x,y) 并集排序 、 setdiff1d(x,y) 差集排序 、 setxor1d(x,y 异或集排序)
- 18、 np.save(‘a.npy’,arr) 、 np.load(‘a.npy’) 、 np.savez(‘b.npz’,a=arr,b=arr)、np.savez_compressed
- 19、diag对角元素返回一维数组 、 dot矩阵点乘 、trace主对角线元素和 、 det计算矩阵行列式、eig计算特征值和特征向量 、 inv计算逆矩阵
- 20、pinv计算Moore-Penrose伪逆 、 qr计算QR分解、svd计算奇异值分解SVD 、 solve求解x的线性系统Ax=b 、 lstsq计算Ax=b的最小二乘积
- 21、seed、permutation一个序列的随机排列、shuffle随机排列一个序列、rand均匀分布抽取样本、randint由低到高范围抽取随机整数、randn均值0方差1正态分布抽取样本
- 22、binomial二项分布抽取样本、normal正态\高斯分布中抽取样本、beta从beta数据中抽取、chisquare卡方分布中抽取样本、gamma伽马分布中抽取、uniform均匀[0,1)分布中抽取
1、Numpy ndarray:多维数组对象
ndarray是N-维数组对象(”数组”、”Numpy数组”、”array”都是ndarray对象)
ndarray是python中一个快速、灵活的大型数据集容器
1.1 生成ndarray
- np.array()———将输入数据转化为ndarray,默认复制所有的输入数据
- np.asarry()———将输入数据转化为ndarray,如果输入已是ndarray不再复制
- np.arange()———Python内建函数range的数组版,不指名默认数据类型是float64浮点型
- np.ones()、np.ones_like()———根据给定形状和数据类型生成全1数组、生成一个形状一样的全1数组
- np.zeros()、np.zeros_like()———根据给定形状和数据类型生成全0数组、生成一个形状一样的全0数组
- np.empty()、np.empty_like()———根据给定形状和数据类型生成一个没有初始化数值的数组、生成一个形状一样的一个没有初始化数值的数组
- np.full()、np.full_like()———根据给定形状和数据类型生成一个指定数值的数组、生成一个形状一样的一个指定数值的数组
- np.eye()、np.identity()———生成一个NxN特征矩阵(对角线1,其他0)
1 | import numpy as np |
1.2 ndarry的数据类型
- int8、uint8、int16、uint16、int32、uint32、int64、uint64 — i1、u1、i2、u2、i4、u4、i8、u8 — 有符号和无符号整数
- float16、float32、float64、uint128 — f2、f4 或 f、f8 或 d、f16 或 g — 半精度浮点数、单精度浮点数、双精度浮点数、拓展精度浮点数
- complex64、complex128、complex256 — c8、c16、c32 — 分别对应32、64、128位浮点数的复数
- bool、object、string_、unicode_ — ?、O、S、U — 布尔值、obiect、修正ASCII字符串类型’、修正Unicode类型
1 | import numpy as np |
1.3 Numpy数组算术
允许批量计算而无需for循环,一般称这种特性是向量化(任何两个等尺寸数组之间的算数操作都应用了逐元素的操作)
同尺寸数组比较会产生一个布尔值数组
1.4 基础索引与切片
一个重点,可以让自己选中 数据的子集或某个单元素
实际上多维和一维索引切片差不多,都很简单
1.5 布尔索引
布尔值数组的长度不正确时,布尔值选择数据的方法并不会报错
布尔数组运算用 | 和 & (and和or对布尔数组没用)
1 | import numpy as np |
1.6 神奇索引
神奇索引是NumPy中的术语,用于描述使用整数数组进行数据索引
总是讲数据飞执导一个新的数组中
1 | import numpy as np |
1.7 数组转置和换轴
转置是一种数据重组形式,数组有transpose和swapaxes方法、T属性
1 | import numpy as np |
2、通用函数:快速地逐元素数组函数
通用函数,也称ufunc,是一种在ndarray数据中进行逐元素操作的函数。
某些简单函数接受一个或多个标量数据,并产生一个或多个标量结果,通用函数就是对这些简单函数的向量化封装。
- abs、fabs、sqrt平方根、square平方、exp、log、log10、sign计算符号、ceil上取整、floor
- rint元素保留到整数位、modf小数整数分开按数组返回、isnan返回None(不是一个数字)形式是布尔数组
- isfinite返回数组是否有限(非inf、非NaN)、isinf是否是无限的、cos、cosh、sin、sinh、tan、tanh
arccos、arccosh、arcsin、arcsinh、arctan、arctanh、logical_not对数组的元素按位取反
二元通用函数
add、subtract除、multiply、divide除、floor_divide整除、power次幂、maximun、fmax、minimun、fmin(忽略NaN)
- mod求模、copysign改符号值、greater、greater_equal、less、less_equal、euqal、not_equal逐个比较返回布尔数组
- logical_and、logical_or、logical_xor异或
1 | import numpy as np |
3、使用数组进行面向数组编程
numpy数组可以让我们利用简单的数组表达式完成多种数据操作任务,而无需写大量循环
向量化:利用数组表达式来代替显示循环的方法
广播机制:解决向量化计算的有效方式
1 | import numpy as np |
3.1 将条件逻辑作为数组操作
np.where(condition,xarr,yarr) 等价于 [ (xarr if condition else yarr) for x,y,c in zip(xarr,yarr,condition)]
np.where(arr0 , 2 , arr) 仅把arr中的负值设置为2
3.2 数字和统计方法
计算数组统计值或关于轴向数据的数学函数,可以作为数组的方式被调用
可以使用聚合函数(也叫缩减函数),sum、mean、std
可以传入参数 axis=1表示维度,默认值输入数字表示维度
- sum、mean、std标准差、var方差
- min、max、argmin最小值位置、argmax、cumsum从0开始累计和、cumpord从1开始累计积
- any至少有个True、all全为True?、sort
3.3 唯一值
np.unique(arr) 等价于 sorted(set(str))
np.in1d(x,y) x中元素是否包含在y中,返回布尔数组
- intersect1d(x,y) 交集排序 、 union1d(x,y) 并集排序 、 setdiff1d(x,y) 差集排序 、 setxor1d(x,y 异或集排序)
4、使用数据进行文件输入和输出
大部分用户倾向于用pandas
数组默认情况下是以压缩格式进行存储的,后缀名是.npy
np.save(‘a.npy’,arr) 、 np.load(‘a.npy’) 、 np.savez(‘b.npz’,a=arr,b=arr) 多个数组
5、线性代数
和Matlab不同点在于是矩阵的逐元素乘积,不是矩阵的点乘积
- diag对角元素返回一维数组 、 dot矩阵点乘 、trace主对角线元素和 、 det计算矩阵行列式
- eig计算特征值和特征向量 、 inv计算逆矩阵 、 pinv计算Moore-Penrose伪逆 、 qr计算QR分解
- svd计算奇异值分解SVD 、 solve求解x的线性系统Ax=b 、 lstsq计算Ax=b的最小二乘积
6、伪随机数生成
np.random可以高效地生成多种概率分布下的完整样本值数组
- seed、permutation一个序列的随机排列、shuffle随机排列一个序列
- rand均匀分布抽取样本、randint由低到高范围抽取随机整数、randn均值0方差1正态分布抽取样本
- binomial二项分布抽取样本、normal正态高斯分布中抽取样本、beta从beta数据中抽取
- chisquare卡方分布中抽取样本、gamma伽马分布中抽取、uniform均匀[0,1)分布中抽取
1 | import numpy as np |
7、示例:随机漫步
1 | import random |