初识Numpy
NumPy是一个Python包,它是一个由多维数组对象和用于处理数组的例程集合组成的库。
通过Numpy,可以进行如下操作:
- 数组的算数和逻辑运算。
- 傅立叶变换和用于图形操作的例程。
- 与线性代数有关的操作,NumPy 拥有线性代数和随机数生成的内置函数。
现在一般通过Numpy、Scipy(Scientific Python)和Matplotlib(绘图库)结合来替代MatLab,是一个流行的技术计算平台。
numpy基础用法
numpy方法 | 解释 |
---|---|
np.dtype | 指定当前numpy对象的整体数据, 见下一个表格 |
np.itemsize | 对象中每个元素的大小, 单位字节 |
np.size | 对象元素的个数, 相当于np.shape中的n*m值 |
np.shape | 轴, 查看数组形状, 对于矩阵, n行m列 |
np.ndim | 秩 |
np.isnan(list) | 筛选出nan值 |
np.iscomplex(list) | 筛选出非复数 |
~ | 取补运算符 |
np.array(数组, dtype=np.bool) | 自定义数组类型 |
np.astype(np.bool) | 转换数组类型 |
np.mat() | 将python 列表转化成矩阵 |
np.mat().getA() | 将matrix对象转成ndarray对象 |
np.matrix() | 同上 |
np.asmatrix() | 将ndarray对象转成matrix对象 |
np.tile() | 重复某个数组。比如tile(A,n),功能是将数组A重复n次,构成一个新的数组传送门 |
np.I | 矩阵求逆 |
np.T | 矩阵转置, 行变列, 列变行, 对角线翻转矩阵 |
np.tolist() | 转换成python列表, 用于和python原生结合写程序 |
np.multiply(x, y) | 矩阵x 矩阵y相乘 |
np.unique() | 数组驱虫, 并且从小到大生成一个新的数组 |
np.arange | 同python range() |
np.arange(24).reshape((2, 3, 4)) | 创建一个2维3行4列的数组, 必须能被给定的长度除开, 可以索引和切片 |
np.arange(24).resize((2, 3, 4)) | 同上, 会修改原值 |
np.linspace(x, y, z) | 等间距生成, x起始, y截止, z步长 |
np.ones(x) | 生成都是x的数组, 可传递三维数组, 几行几列, 具体的个数 |
np.zeros(x) | 生成都是0的数组 |
np.full([x, y], z) | 自定义模板数组, 生成x行y列都是z的数组 |
np.eye(x) | 创建一个正方的x*x单位的矩阵, 对角线为1, 其余为0 |
np.flatten() | 数组降维, 不改变 原值 |
np.random.rand(x, y, z) | 生成一个一维x随机数或生成x*y的随机数组 |
np.random.randn(x, y) | 正态分布随机数 |
np.random.randint(low, high, (shape)) | 整数随机数 |
np.random.normal(loc, scale, (size)) | 从指定正态分布中抽取样本, loc为概率分布的均匀值, 标准差scale |
np.random.seed(s) | 给一个随机数字固定 |
np.randomunifrom(low, high, (size)) | 均匀分布的数组, 有小数 |
np.random.shuffle(a) | 将数组a的第0轴(最外维度)进行随机排列(洗牌), 改变数组a, 行边列不变 |
np.random.permutation(a) | 同上, 不改变数组a |
np.random.choice(a, size=None, replace=False, p=数组a/np.sum(b)) | 从一维数组a中以概率p抽取元素,形成size形状新数组,replace表示是否可以重用元素,默认为False,p为抽取概率,本位置越高,抽取概率越高 |
np.sum(axis=None) | 求和, axis=0为列, 1为行 |
np.argsort() | 矩阵每个元素坐标排序 |
np.sort(axix=None) | 从小打大排序 |
-np.sort(axis=None) | 从大到小排序 |
np.sort_values(‘字段’, ascending=False) | 排序,升序排列 |
np.mean(axis=None) | 平均数 |
np.average(axis=None,weights=None) | 加权平均,weights加权值,不设为等权重,例子[10, 5, 1],每列分别X10,X5,X1在/(10+5+1) |
np.var(axis=None) | 方差:各数与平均数之差的平方的平均数 |
np.std(axis=None) | 标准差:方差平方根 |
np.min(axis=None) | 最小值 |
np.argmin(axis=None) | 求数组中最小值的坐标 |
np.median(axis=None) | 中位数 |
np.ptp(axis=None) | 元素最大值与最小值的差 |
np.cumsum() | 累加,cumsum和cumprod之类的方法不聚合,产生一个中间结果组成的数组,默认一维数组,1为按原样 |
np.cumprod() | 累乘 |
np.count_nonzero(arr > 0) | 计数非0值个数,布尔值会被强制转换为1和0,可以使用sum()对布尔型数组中的True值计数 |
np.bools.any() | 测试数组中是否存在一个或多个True |
np.bools.all() | 数组中所有值是否都是True, 测试有没有空值 |
nparray索引和切片
# 创建0-23, 共2个三行四列的数组
a = np.arange(24).reshape((2,3,4))
"""
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
"""
# 一个三维数组,提取12的话,python list是a[1][0][0], ndarange可以是a[1,0,0],也可以是[1][0][0]
# 可以用负数
# a[1,:] 选取第一维数组里面所有
# a[:,1] 选取所有维度,第一行
# a[1,:,3] 选取第一维度数组所有行里的第三个值
# a[:,0:2,1:3] 选取所有维度的第0行到第2行, 取元素第1个到第3个
# a[:,:,::2] 选取所有维度, 所有行, 步长为2的所有行
# -------------------------------------------------------------------------
# 例子,布尔型索引
names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])
data = n