第十章_Numpy库 - 图1

第十章_Numpy库

数组操作

创建数组

通过括号中传递Python的序列对象(列表)进行创建数组,多层则多维数组

  • np.array(序列对象)

    • 例子
      • my_list = [1,2,3,4,5]my_numpy_list = np.array(my_list)

        指定数据类型进行创建数组

  • np.array(序列对象,dtype = np.数据类型)

    返回数据元素的数据类型

    三大区别👉

  • type()

    • 返回数据结构类型(list、dict、numpy.ndarray 等)
  • dtype()
    • 返回数据元素的数据类型(int、float等)
      • 1)由于 list、dict 等可以包含不同的数据类型,因此不可调用dtype()函数

      • 2)np.array 中要求所有元素属于同一数据类型,因此可调用dtype()函数

  • astype(‘数据类型英文’)

    • 改变np.array中所有数据元素的数据类型。
      • 能用dtype() 才能用 astype()

        数组转化为列表(返回一个列表,原数组不改变)

        数组名.tolist()

        查看数组的形状、维度、大小

        查看数组行和列

  • 数组名.shape

    查看行数

  • 数组名.shape[0]

    查看列数

  • 数组名.shape[1]

    改变数组的形状

    数组名.shape = (行数,列数)

  • 若行(列)数填-1,则为不干涉,由计算机根据列(行)数来自动计算行(列)数

    数组名.reshape((行,列))

    特殊数组

    产生全0的一维数组

  • np.zeros(列数)

    产生全1的一维数组

  • np.ones(列数)

    产生形状为(2,3)的全0数组

  • np.zeros((2,3))

    产生指定形状且指定填充元素的数组

  • np.full((行,列),填充元素)

    随机数组

    产生从0-1均匀产生随机数的数组

  • np.random.rand(行数,列数)

    产生从以 0 为中心的标准正态分布或高斯分布中产生随机样本。

  • np.random.randn(行数,列数)

    产生从半开半闭区间[low,high)上生成离散均匀分布的整数值;若high=None,则取值区间变为[0,low)

  • np.random.randint()

    • np.random.randint(1.75, 4, 11) ##11个随机整数数字 #array([3, 3, 2, 3, 1, 1, 2, 2, 2, 3, 2])
    • np.random.randint(5, size=(2, 4)) #二行四列,higt为none,取值是0到5之间的整数 array([[4, 3, 0, 4], [3, 1, 1, 3]])
    • np.random.randint(a,b):用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n:a<=n

      其他创建数组的方法

      创建 m 行 n 列,未初始化的二维数组

  • np.empty((m,n))

    根据数组 a 的形状生成一个元素全为 1 的数组

  • np.ones_like(a)

    根据数组 a 的形状生成一个元素全为 0 的数组

  • np.zeros_like(a)

    根据数组 a 的形状生成一个元素全为 val 的数组

  • np.full_like(a,val)

    只分配内存,不进行初始化

  • np.empty((2,3),np.int)

    测定数组长度大小

    测定数组长度(元素个数)

  • len(数组名)

    测定数组数据的个数(元素可包含数据)

  • 数组名.size

    测定数组的维度

  • 数组名.ndim

    访问数组

    指定单个访问

  • 数组名[层,行,列]

    切片访问多个

  • 数组名[层,行:,列]

    ⭐访问符合条件的元素

  • 数组名[: , 2][数组名[: , 0] < 5]

    • [: , 2]表示取所有行的第 3 列(第 3 列索引号为 2)

    • [数组名[: , 0] < 5]表示取第一列(第 1 列索 引号为 0)值小于 5 所在的行(第 1、 2 行)

    • 整体表示取第 1、 2 行的第 3 列,得到结果 array([3, 6])这个“子”数组。

  • np.where(c==4)

    • 查找c数组中数据4的位置

      删除数组对应行/列,返回一个新数组

      通过.delete

  • np.delete(a,1,0)

    • a为数组,1为行的索引号,0表示axis=0

      • axis=0时为x轴,=1时为y轴删除
        • 第十章_Numpy库 - 图2
  • np.delete(数组名,(1,2),0)
    • 删除数组的第2、3行

  • np.delete(数组名,1,axis = 1)

    • 删除第二列

      通过.split(a,2,axis = 1)

  • 删除第二列

    通过.hsplit(a,2)

  • 删除第二列

    数组拼接

    数组a、b竖直(Vertical)拼接

  • np.vstack((a,b))

    数组a、b水平(Horizontal)拼接

  • np.hstack((a,b))

    数组拆分

    数组a竖直等分切割为b份

  • np.vsplit(a,b)

    数组a水平等分切割为b份

  • np.hsplit(a,b)

    查重

    去重一维数组或者列表的元素,并按元素从小到大返回一个新的无元素重复的元组或者列表

  • np.unique(a,return_index,return_inverse)

    • a:表示数组
    • return_index:Ture 表示同时返回原始数组中的下标
    • return_inverse:True 表示返回重建原始数组用的下标数组

      数组展开

      数组展开为一维数组

  • 数组名.flatten()

    • 注意:展开的维数不一定是一维,通过.ndim查看维度可能有2个括号(二维)

      展开一个可以解析的结构为一维数组

  • np.ravel(数组名)

    缺失值检测(数据处理前一般检查是否缺失项进行删除或填补)

    检查是否是空值nan,返回布尔值

  • np.isnan(数组名)

  • 注意:对空值的判断不能使用直接的数学比较形式”==”,不能用”==np.nan”来判断,只能用np.isnan()来操作。 np.nan的数据类型是float。

    查找空值nan并返回位置

  • np.where(np.isnan(数组名))

    查找空值nan并返回类似坐标形式位置

  • np.argwhere(np.isnan(数组名))

    数组复制

    浅复制-数组不同,数据共享

  • 数组2 = 数组1.view()

    深复制-数组不同,数据不共享

  • 数组2 = 数组1.copy()

    两者理解

  • 复制方式不受另一个数组改变而改变是因为.copy()复制方法是深复制,复制创建了新的数组对象,同时两个数组的数据不共享。

  • 如果想要复制的数组随原数组数据改变而改变,即需要通过浅复制——.view()视图方式去进行复制,此时两个数组不同,但是指向同一个内存地址,他们的数据是共享(相同)的。

    数组排序

    让a数组-按行排序并生成一个新的数组

  • np.sort(a,axis=1)

  • a.sort(axis = 1)
  • axis0与1

    • axis=1指按列分组去对比行值排序,行不变
    • axis=0指按行分组去对比列值排序,

      引用数组a排序后的索引位置

  • np.argsort()

    • j =np.argsort(a)

      最大最小值查找

      查找每列最大值

  • np.argmax(a,axis = 0)

    查找每列最小值

  • np.argmin(a,axis = 0)

    查找每列的最大值

  • 数组名.max(axis = 0)

    查找每列的最小值

  • 数组名.min(axis = 0)

    数组的保存与读取

    保存一个数组到一个二进制文件中

  • 简单的数组保存

    • np.save(‘路径/…/保存的命名’,要保存的数组名)
  • 非结构化数据保存

    • np.savez(‘路径/…/保存的命名’,保存的数组名1 = 保存的数组, 保存的数组名2 = 保存的数组,…)

      读取保存的文件

  • np.load(‘路径/../文件名’)

    数值计算

    常用

  • 数组求和

    • sum
  • 数组均值计算
    • mean
  • 数组方差计算
    • var
  • 数组标准差计算
    • std
  • 数组所有元素累计和
    • comsum
  • 数组所有元素的累计积
    • comprod
  • 求数组元素的平方根
    • np.sqrt(数组名)
  • 计算数组n次方
    • np.power(数字或数组,几次方)
      • np.power(a,3)
  • 计算数组中位数

    • np.median(arr,axis = 0)

      注意事项

  • (只支持数值、空值计算,其他会报错)

  • 注意axis即轴在计算时的变化理解

    • asix=0,每一行的行方向(x轴,从上到下)进行计算
    • asix=1,每一行的列方向(y轴,从左往右)进行计算

      矩阵(Matrix)对象

      创建

  • np.matrix([[1,2],[3,4]])

    返回矩阵的转置

  • .T

    返回矩阵自身的逆矩阵

  • .I

    求解线性方程组

    np.linalg.solve(A,B)

  • 线性方程组Ax=B

    概述

    在用 Python 对 n 维数组和矩阵进行运算时,Numpy 库提供了大量有用特征。

    Numpy 库数组有两种形式

    向量

  • 一维数组

    矩阵

  • 多维数组。在某些情况下,矩阵只有一行或一列。

    导入Numpy库

    import numpy as np

    通常通过as将np作为Numpy的别名

    数据组织的维度

    一维数据

    序列或集合的内容

    存储方式

  • 4种存储方式

    • ①空格分隔元素
    • ②逗号分隔元素
      • 被称为CSV格式(Comma-Separated Values,即逗号分隔符格式)
        • 简介
          • 一种通用的、相对简单的文件格式,以.csv为扩展名
          • 在商业和科学上广泛应用,大部分编辑器等都支持直接读写文件为CSV格式
        • 应用案例:
          • Windows平台上的记事本
          • 微软Office Excel等
        • Python中实现CSV格式
          • 将列表对象输出或输入成列表对象
          • 采用.join()连接输出为CSV最方便
            • 存储文件的变量.write(‘,’.join(list1)+’\n’)
              • 将list1列表以,为连接符进行连接形成一个整体字符串写入到存储文件的变量中,然后换行。

    • ③换行分隔元素
    • ④其他特殊符号分隔-如分号分隔

      二维数据

      可看作一维数组组成的二维数组。每个内部列表的单个元素为对应行的列元素。

      list = [[‘一’,’二’,’三’][‘四’,’五’,’六’]]

      多维数据

      HTML

  • 网页

    XML

    JSON

  • 特点

    • 底层以键值对形式展示
    • 通过逗号分隔
    • []组成各键值对成为整体形成高层次的键值对
  • 代码
    • ‘本书’:[ {‘第一章’:’程序设计基本方法’} {‘第二章’:’Python基本元素’}………]