Python数据处理工具(一),NumPy

2020/07/19 Python 共 2094 字,约 6 分钟

NumPy适合处理统一的数值数组数据

简介

  1. Python 的 list 是一个通用结构。它能包括任意类型的对象,并且是动态类型。

  2. NumPy 的 ndarray 是静态、同质的类型,当 ndarray 对象被创建时,元素的类型就确定。 由于是静态类型,所以 ndarray 间的加、减、乘、除用 C 和 Fortran 实现才成为可能,所以运行起来就会更快。 根据官当介绍,底层代码用 C 语言和 Fortran 语言实现,实现性能无限接近 C 的处理效率。

  3. NumPy内置向量化运算和广播机制,使用时更加简洁,会少写很多嵌套的 for 循环,因此代码的可读性大大增强。

用法

创建

import numpy as np

if __name__ == '__main__':
    # 1.按数据的结构生成矩阵
    a = np.array([[1, 2, 3], [4, 5, 6]])
    print(a)
    # 2.和range用法一样,生成一维矩阵
    b = np.arange(1, 7, 2)
    print(b)
    # 3.起始点间取n个间隔相同的点
    c1 = np.linspace(1, 6, 6)
    # 起始点为数组时,按axis等分,axis默认为0
    c2 = np.linspace([1, 3], [4, 6], 3, axis=0)
    print(c1, '\n', c2)
    # 4.起始点间取n个间隔相同的点为指数,base为底数
    d = np.logspace(2, 8, 4, base=3)
    # 5.数组为主对角线,k为向右偏移距离
    e = np.diag([1, 2, 3], k=1)
    # 6.创建元素全都为0的矩阵,shape为元组
    f = np.zeros((2, 3))
    # 7.创建元素全都为1的矩阵,shape为元组
    g = np.ones((2, 3))
    # 8.创建随机浮点数矩阵
    # 使用相同的seed()值,每次生成的随机数相同
    np.random.seed(100)
    # randint(low,high,(shape))随机生成整数矩阵
    # rand创建元素为0-1的随机小数矩阵,shape为参数
    i = np.random.randint(1, 10, (3, 5)) + np.random.rand(3, 5)
    print(i)

矩阵级操作

import numpy as np

if __name__ == '__main__':
    a = np.array([[1, 2, 3], [4, 5, 6]])
    # 1.由外至内获取axis长度
    print(a.shape)
    # 2.将原矩阵的shape改变为参数中的值,原矩阵不变
    b = a.reshape(3, 2)  # 负数可用来占位
    print(b)
    # 3.将高维矩阵转为一维,原矩阵不变
    c = a.flatten()
    print(c)
    # 4.按axis紧跟着复制元素
    d = np.repeat(a, 2, axis=0)
    print(d)
    # 5.按shape复制元素,位数不足则以低维为准
    e1 = np.tile(a, (2, 1))
    # 位数超出,则将原数据升维
    e2 = np.tile(a, (3, 2, 1))
    print(e1, '\n', e2)
    # 6.在np.newaxis所在位置添加一维
    f = a[np.newaxis, :]
    print(f.shape)
    # 7.垂直方向叠加矩阵
    g = np.vstack((d, e1))
    print(g)
    # 8.水平方向叠加矩阵
    h = np.hstack((d, e1))
    print(h)
    # 9.逆时针90*k度旋转矩阵
    i = np.rot90(a, k=1)
    print(i)

元素级操作

import numpy as np

if __name__ == '__main__':
    a = np.arange(4).reshape(2, 2)
    # 1.对所有元素进行计算操作
    b1 = a + 1
    # 矩阵间对应位置的元素计算
    b2 = a * a
    print(b1, '\n', b2)
    # 2.提取符合条件的元素
    c1 = a[a > 2]
    # 甚至赋值,但改变原矩阵
    c2 = a.copy()  # 深拷贝
    c2[(c2 % 2) == 1] = -1
    print(c1, '\n', c2)
    # 3.切片,截取想要的部分
    print(a[:, 0:1])
    # 4.线性代数矩阵运算
    d = np.dot(a, a)
    print(d)
    # 5.获取非0元素索引
    e1 = np.nonzero(a)
    # transpose矩阵转置,将结果转化为向量矩阵
    # 如果填入参数则可调换任意维度的数据
    # e1非矩阵,只能用transpose,不能用a.T
    e2 = np.transpose(e1)
    print(e1, '\n', e2)
    # 6.获取最值索引,未指明维度时,返回buffer中最值索引
    print(a.argmax(axis=0), a.argmin())

统计

import numpy as np

if __name__ == '__main__':
    a = np.arange(24).reshape(2, 3, 4)
    print(a)
    # 1.求和,默认从所有元素中得出,也可按axis计算,下同
    print(a.sum())
    # 2.求最大值
    print(a.max())
    # 3.求最小值
    print(a.min())
    # 4.求平均值
    print(a.mean())
    # 5.求方差
    print(a.var())
    # 6.求标准差
    print(a.std())
    # 7.求迹(矩阵主对角线元素和),
    print(a.trace())

文档信息

Search

    Table of Contents