• ndarray


    ndarray

    ndarray-多维数组对象

    • ndarray数组分两部分
      • 实际数据
      • 描述数据的元数据(数据类型/维度等)

    ndarray所有元素类型相同,下标从0开始

    import numpy as np
    
    a = np.array([0,1,2,3,4])
    b = np.array([[0,1,2,3,4],[9,8,7,6,5]])
    
    a
    type(a)
    a[0], a[1], a[2]
    a[0] = 5
    a

    ndarray基本概念

    • 特征:能描述物体的最小粒度
    • 维度(维数):描述一个对象所需的特征(参数)层数
    • 轴:axis,特征数量
    • 秩:rank,轴的个数,或数据维数(层数)
    import numpy as np
    
    a = np.array([1,2,3])
    b = np.array([[1,0],[0,1],[1,2]])
    c = np.array([[[1,2,3,4],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4],[1,2,3,4]]])
    
    a
    a.shape #
    a.ndim #

    ndarray对象属性

    • .ndim,秩
    • .shape,轴,对象尺度,对于矩阵,n行m列
    • .size,对象元素的个数,相当于.shape中的n*m的值
    • .dtype,对象的元素类型
    • .itemsize,对象中每个元素的大小,单位字节
    import numpy as np
    
    a = np.array([[0,1,2,3,4],[9,8,7,6,5]])
    # b = np.array([[0,1,2,3,4],[9,8,7,6]]) # 非同质ndarray元素为对象类型,对象类型无法发挥Numpy的性能优势,一般不用
    
    a
    a.ndim
    a.shape
    a.size
    a.dtype
    a.itemsize

    ndarray-数组创建和变换

    创建ndarray数组

    1:从Python的列表/元组等类型创建数组

    x = np.array(list/tuple)

    创建数组指定默认数据类型,也可以自行指定

    x = np.array(list/tuple,dtype=np.int)

    不写int32/float64之类,程序会自动调节int/float类型

    import numpy as mp
    
    x = np.array([1,2,3,4])
    y = np.array([[1,2],(0.1,0.2)])
    z = np.array([[1,2],(0.1,0.2)], dtype=np.int)
    
    z

    2 使用Numpy函数创建特定数组

    • np.arange(n),类似range()函数(递增的整数序列),返回ndarray类型,元素从0到n-1
    • np.ones(shape),根据shape生成一个全1数组,shape是元组类型
    • np.zeros(shape),根据shape生成一个全0数组,shape是元组类型
    • np.full(shape,val),根据shape生成一个数组,每个元素都是val
    • np.eye(n),创建一个正方的n*n单位矩阵,对角线为1,其余为0

    numpy生成的数组,如不指定类型几乎全为浮点型(arange除外,它是整型)。因为科学计算中测量值,例如温度、长度,都是浮点数

    例子:

    import numpy as mp
    
    np.arange(10)
    np.ones((3,6))
    np.zeros((3,6),dtype=np.int32)
    np.full(6,3)
    np.full((2,3,4),25)
    np.eye(5)
    
    # 生成多维数组
    x = np.ones((2,3,4))
    
    x
    x.shape

    其他Numpy函数,用于大规模科学计算

    • np.concatenate() 将两个或多个数组合并成一个新数组
    • np.ones_like(a) 根据数组a的形状生成一个全1数组
    • np.zeros_like(a) 根据数组a的形状生成一个全0数组
    • np.full_like(a,val) 根据数组a的形状生成一个全 val 数组
    • np.linspace() 根据起止数据等间距填充数据形成数组

    np.concatenate((a1,a2,...), axis=0),ndarray数组拼接

    import numpy as mp
    
    a = np.array([[1,2,3],[4,5,6],[7,8,9]])
    b = np.array([[10,11,12]])
    
    np.concatenate((a,b),axis=0) #按行拼接
    np.concatenate((a,b.T),axis=1) # 按列拼接
    import numpy as mp
    
    a = np.linspace(1,10,4)
    a
    
    b = np.linspace(1,10,4,endpoint = False) #endpotin表示终止元素是否是n个生成元素中的一个
    b

    变换ndarray数组

    维度变换

    • .reshape(shape):不改变数组元素,返回一个shape形状的数组,原数组不变
    • .resize(shape):与.reshape()功能相同,但修改原数组
    • .flatten():对数组降维,返回折叠后的一维数组,原数组不变
    import numpy as mp
    
    a = np.ones((2,3,4),dtype=np.int32)
    
    #a.reshape((3,8))
    #a.resize((3,8))
    a
    
    #a.flatten() #无变化
    a
    b = a.flatten() #变化
    b

    类型变换

    new_a = a.astype(new_type),astype会生成一个新数组

    import numpy as mp
    
    a = np.ones((2,3,4),dtype=np.int) #不写int32之类,程序会自动调节int类型
    a
    a.dtype
    
    b = a.astype(np.float)
    b
    b.dtype

    ndarray转为list

    .tolist():ndarray转为Python列表,用于和Python原生结合编写程序

    import numpy as mp
    
    a = np.full((2,3,4),25,dtype=np.int32)
    a
    
    a.tolist()

    ndarray数组去重

    np.unique(a),去除重复数组值

    import numpy as mp
    
    a = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
    np.unique(a)

    ndarray-数组操作(增查改删)

    查,Read

    • 索引:获取数组中特定位置的元素
    • 切片:获取数组中特定元素的子集

    一维数组的索引和切片

    与Python list列表类似

    import numpy as mp
    
    a = np.array([9,8,7,6,5])
    
    a[2] #索引
    a[1:4:2] #切片,三个值为: 起始编号,终止编号(不含),步长(变化量),参数用冒号分隔

    多维数组的索引和切片

    import numpy as mp
    
    a = np.arange(24).reshape((2,3,4))
    a
    
    #多维数组的索引,两种方式,ndarray方式和Python list方式
    a[1,2,3] # a[1][2][3]
    a[-1,-2,-3] # a[-1][-2][-3] #倒数第一个,倒数第二个...
    
    # 多维数组的切片
    a[:,1,-3]
    a[:,1:3,:] #不关心第一维度,第二维度 1到3不含3,第三维度不关心
    a[:,:,::2] #第一/第二维度不关心,第三参数 每个维度可以使用步长跳跃切片(不关心起始结束但要以2为步长获取值)

    返回指定条件元素所在位置索引

    import numpy as mp
    
    a = np.array([[1,2,3,4],[5,4,7,8]])
    b = np.array([[[1,2,3,4],[5,4,7,8]],[[1,4,3,2],[5,2,1,8]]])
    
    np.where(a > 4) #索引坐标 纵向排列
    np.where(b == 4)

    增,Create

    import numpy as mp
    
    a = np.array([[1,2,3],[4,5,6],[7,8,9]])
    b = np.array([[10,11,12]])

    改,Update

    import numpy as mp
    
    a = np.array([[1,2,3],[4,5,6]])
    a
    
    a[0][1] = 10
    
    a[:,0:2] = 1 # 切片批量修改
    a[:,0:2] = [[11,12],[13,14]]

    删,Delete

    np.delete(arr, obj, axis=None)

    并没有真删除,只是返回了一个去掉删除项的新数组

    import numpy as mp
    
    a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
    a
    
    #删除行
    b1 = np.delete(a, -1, axis=0) 
    #删除列
    b2 = np.delete(a, -1, axis=1)  
    #删除多列
    b3 = np.delete(a, [1,2], axis=1)

    ndarray-数组运算

    数组与标量运算

    • 标量:一个数值
    • 广播机制:自动补齐,数组与标量之间的运算作用于数组的每一个元素
    import numpy as np
    
    # 计算a与元素平均值的商
    a = np.arange(24).reshape((2,3,4))
    a
    a.mean() # a中所有元素的算数平均值
    a = a/a.mean()
    a

    Numpy一元函数

    了解即可,运算时注意原数组是否被改变,几乎所有一元函数都是生成新数组

    对ndarray中的数据执行元素级运算的函数

    • np.abs(x) np.fabs(x) 计算数组各元素的绝对值
    • np.sqrt(x) 计算数组各元素的平方根
    • np.square(x) 计算数组各元素的平方
    • np.log(x) np.log10(x) np.log2(x) 计算数组各元素的自然对数/10底对数和2底对数
    • np.ceil(x) np.floor(x) 计算数组各元素的ceiling值(不超过元素的整数值)或floor值(小于这个元素的最大整数值)
    • np.rint(x) 计算数组各元素的四舍五入值
    • np.modf(x) 将数组各元素的小数和整数部分以两个独立数组形式返回
    • 计算数组各元素的普通型和双曲型三角函数
      • np.cos(x) np.cosh(x)
      • np.sin(x) np.sinh(x)
      • np.tan(x) np.tanh(x)
    • np.exp(x) 计算数组各元素的指数值
    • np.sign(x) 计算数组各元素的符号值,1(+),0,-1(-) 正数为1负数为-1其他(0时)为0
    import numpy as np
    
    a = np.arange(24).reshape(2,3,4)
    np.square(a)
    
    a = np.sqrt(a)
    a
    
    np.modf(a)
  • 相关阅读:
    HEW MAP文件使用
    UltraEdit 脚本 实现查找替换
    PC软件与PLC串口通信 奇偶检验问题
    Halcon的应用程序 打开后 弹出没有帮助文件错误提示
    STM32f4 ARM Bootloader
    RAM
    知识整理--内存
    CentOS 5.x 多个ISO文件 安装方法(VMware)
    Modbus总结
    【CF1253A】Single Push【模拟】
  • 原文地址:https://www.cnblogs.com/yoyo1216/p/10131574.html
Copyright © 2020-2023  润新知