zoukankan      html  css  js  c++  java
  • Numpy初体验

    Numpy

    一、简介

    Numpy是高性能科学计算和数据分析的基础包。它也是pandas等其他数据分析的工具的基础,基本所有数据分析的包都用过它。

    NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。

    它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。

    1、安装

    pip install numpy
    

    2、特殊的导包

    数据分析界约定俗成的将numpy包导入命名为np

    import numpy as np
    

    二、ndarray-多维数组对象

    Numpy的核心特征就是N-维数组对 —— ndarray。

    1、创建ndarray数组

    方法 描述
    array() 将列表转换为数组,可选择显式指定dtype
    arange() range的numpy版,支持浮点数
    linspace() 类似arange(),第三个参数为数组长度
    zeros() 根据指定形状和dtype创建全0数组
    ones() 根据指定形状和dtype创建全1数组
    empty() 根据指定形状和dtype创建空数组(随机值)
    eye() 根据指定边长和dtype创建单位矩阵

    1.1 array

    np.array([[a,b,c],[x,y,z],···])

    列表套列表,内嵌的列表个数为维度。

    # 创建一维数组
    >>>:arr = np.array([1,2,5,8])
    
    # 创建多维数组
    >>>:arr = np.array([[1,2,5,8],[2,4,6,7]])
    
    # dtype指定数组元素类型
    >>>:arr3 = np.array([1,2,3,4,5,6], dtype='float')
    array([1., 2., 3., 4., 5., 6.])
    

    1.2 arange

    创建间隔数为1的范围数组。

    np.arange(x) 指定右端点,左端点默认为0。

    np.arange(x,y) 指定左右端点。

    # 创建0~5,间隔为1的数组,右闭
    >>>:np.arange(5)
    array([0, 1, 2, 3, 4])
        
    # arange创建1~6,间隔为1的数组,右闭
    >>>:np.arange(1,6)
    array([1, 2, 3, 4, 5])
    

    1.3 linspace

    np.linspace(start,stop,num=50,endpoint=True,
    retstep=False,dtype=None,axis=0,)

    创建间隔数不指定为1的范围数组。

    num参数用来控制范围拆分的个数,从而控制间隔数。

    endpoint用来指定区间右端点闭或开。

    # linspace创建指定拆分个数的数组
    >>>:np.linspace(1,10,num=10)
    array([1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
    
    # linspace创建数组时,endpoint可以指定区间右闭或右开
    >>>:np.linspace(1,10,num=9,endpoint=False)
    array([1., 2., 3., 4., 5., 6., 7., 8., 9.])
    

    1.4 zeros

    zeros(shape, dtype=float, order='C')

    创建元素全部为0的数组。

    sharp用来控制数组的维度和长度(行,列)。

    >>>:np.zeros((2,5))
    array([[0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0.]])
    

    1.5 ones

    np.ones(shape, dtype=None, order='C')

    创建元素全部为1的数组。

    sharp用来控制数组的维度和长度(行,列)。

    >>>:np.ones((5,3))
    array([[1., 1., 1.],
           [1., 1., 1.],
           [1., 1., 1.],
           [1., 1., 1.],
           [1., 1., 1.]])
    

    1.6 empty

    empty(shape, dtype=float, order='C')

    创建一个随机元素数组。

    sharp用来控制数组的维度和长度(行,列)。

    >>>:np.empty((3,3))
    array([[2.69329361e-312, 2.61054848e+106, 9.65232955e-312],
           [9.65232955e-312, 9.65232955e-312, 9.65232955e-312],
           [9.65232955e-312, 6.17188958e+303, 2.71615461e-312]])
    

    1.7 eye

    np.eye(N, M=None, k=0, dtype=<class 'float'>, order='C')

    创建一个2维数组,对角线上为1,其他地方为0。

    N:表示行数

    M:表示列数,默认与行数一样

    k:对角线索引。0(默认值)为主对角线,正值为上对角线,负值为下对角线。

    >>>:np.eye(3,2)
    array([[1., 0.],
           [0., 1.],
           [0., 0.]])
    
    >>>:np.eye(3,2,-1)
    array([[0., 0.],
           [1., 0.],
           [0., 1.]])
    
    
    

    2、ndarray对象的特点

    这也是它和Python【列表】的不同之处。

    1. 数组对象内的元素类型必须相同
    2. 数组大小不可修改

    3、ndarray的常用属性

    属性 描述
    T 数组的转置(对高维数组而言)
    dtype 数组元素的数据类型
    size 数组元素的个数
    ndim 数组的维数
    shape 数组的维度大小(以元组形式)(行,列)
    reshape 重塑数组的形状(行,列)
    >>>:arr
    array([[1, 2, 5, 8],
           [2, 4, 6, 7]])
    
    >>>:arr.T
    array([[1, 2],
           [2, 4],
           [5, 6],
           [8, 7]])
    
    >>>:a1
    array([[1, 2, 3, 4, 5],
           [1, 2, 3, 4, 5],
           [1, 2, 3, 4, 5]])
    
    >>>:a1.shape
    (3, 5)
        
    
    arr6 = np.array([[1, 2, 3, 4, 5],
                     [1, 2, 3, 4, 5],
                     [1, 2, 3, 4, 5]])
    >>>:arr6
    array([[1, 2, 3, 4, 5],
           [1, 2, 3, 4, 5],
           [1, 2, 3, 4, 5]])
    
    >>>:arr6.reshape(5,3)
    array([[1, 2, 3],
           [4, 5, 1],
           [2, 3, 4],
           [5, 1, 2],
           [3, 4, 5]])
    
    
    

    4、ndarray的数据类型

    • dtype
    类型 描述
    布尔型 bool_
    整型 int_ int8 int16 int32 int 64
    无符号整型 uint8 uint16 uint32 uint64
    浮点型 float_ float16 float32 float64
    复数型 complex_ complex64 complex128

    布尔型:

    与Python不一样的是,bool_ 后面多了一个下划线_ 。

    整型:

    int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数。

    无符号整型:

    只能用来存正数,不能用来存负数。

    补充:

    astype()方法可以强制转换数组的数据类型。

    5、索引和切片

    5.1 一维数组

    5.1.1 索引

    索引和Python的列表用法一样。

    >>>:arr1 = np.array([1,2,3,4])
    >>>:arr1[0],arr1[1],arr1[2]
    (1, 2, 3)
    
    
    

    5.1.2 切片

    切片也和Python的列表用法一样。

    >>>:arr1
    array([1, 2, 3, 4])
        
    >>>:arr1[1:2]
    array([2])
    
    >>>:arr1[1:3]
    array([2, 3])
    
    >>>:arr1[1:4]
    array([2, 3, 4])
    
    
    

    5.2 二维数组

    5.2.1 索引

    取元素要确定行和列的位置:

    数组[行,列]/数组[(行,列)]

    >>>:arr2 = np.array([[1,2,3,4],[5,6,7,8]])
    >>>:arr2
    array([[1, 2, 3, 4],
               [5, 6, 7, 8]])
    
    >>>:arr2[0,0],arr2[1,1]
    (1, 6)
        
    >>>:arr2[(0,0)]    
    1
    
    
    

    5.2.2 切片

    >>>:arr3
    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],
           [24, 25, 26, 27, 28, 29]])
    
    >>>:arr3[1:3,1:3]
    array([[ 7,  8],
           [13, 14]])
    
    >>>:arr3[2:5,1:4]
    array([[13, 14, 15],
           [19, 20, 21],
           [25, 26, 27]])
    
    
    

    5.3 布尔型索引

    将同样大小的布尔数组传进索引,会返回一个有True对应位置的元素的数组

    >>>:arr3
    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],
           [24, 25, 26, 27, 28, 29]])
    
    >>>:>4
    array([[False, False, False, False, False,  True],
           [ True,  True,  True,  True,  True,  True],
           [ True,  True,  True,  True,  True,  True],
           [ True,  True,  True,  True,  True,  True],
           [ True,  True,  True,  True,  True,  True]])
    
    >>>:arr3[arr3>5]
    array([ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,23, 24, 25, 26, 27, 28, 29])
    
    >>>:arr3[arr3<13]
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
    
    
    

    5.4 花式索引

    中括号中套中括号,内层中括号中写索引下标,可取多个不连续值。

    >>>:n1 = np.array([1,2,3,4,5])
    >>>:n1
    array([1, 2, 3, 4, 5])
    
    >>>:n1[[1,3]]
    array([2, 4])
    
    

    三、通用函数

    能对数组中所有元素同时进行运算的函数就是通用函数。

    1、常用通用函数

    1.1 一元函数

    函数 功能
    abs、fabs 分别是计算任意数和浮点数的绝对值
    sqrt 计算各元素的平方根
    square 计算各元素的平方
    exp 计算各元素的指数e**x
    log 计算自然对数
    sign 计算各元素的正负号
    ceil 向上取整
    floor 向下取整
    rint 计算各元素的值四舍五入到最接近的整数,保留dtype
    modf 将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似
    isnan 计算各元素的正负号
    isinf 表示那些元素是无穷的布尔型数组
    cos,sin,tan 普通型和双曲型三角函数
    >>>:a = -4
    >>>:np.abs(a)
    4
    >>>:b = -4.4423423
    >>>:np.abs(b)
    4.4423423
    >>>:np.fabs(b)
    4.4423423
    >>>:np.fabs(a)
    4.0 
        
    # 向上取整
    >>>:np.ceil(b)
    -4.0
    
    # 向下取整
    >>>:np.floor(b)
    -5.0
        
    # 四舍五入
    >>>:arr4 = np.linspace(1,5,num=4)
    >>>:arr4
    array([1.        , 2.33333333, 3.66666667, 5.      ])
    >>>:np.rint(arr4)
    array([1., 2., 4., 5.])
        
    # 拆分整数与小数
    >>>:np.modf(4.5)
    (0.5, 4.0)
        
    >>>:np.isnan(3)
    False
    >>>:np.isnan(np.nan)
    True
    
    
    

    1.2 二元函数

    函数 功能
    add 将数组中对应的元素相加
    subtract 从第一个数组中减去第二个数组中的元素
    multiply 数组元素相乘
    divide、floor_divide 除法或向下圆整除法(舍弃余数)
    power 对第一个数组中的元素A,根据第二个数组中的相应元素B计算A**B
    maximum,fmax 计算最大值,fmax忽略NAN
    miximum,fmix 计算最小值,fmin忽略NAN
    mod 元素的求模计算(除法的余数)
    >>>:arr1
    array([1, 2, 3, 4])
    >>>:arr2
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    
    >>>:np.add(1,2)
    3
    
    >>>:np.subtract(arr2,arr1)
    array([[0, 0, 0, 0],
           [4, 4, 4, 4]])
    
    
    

    2、数学统计方法

    函数 功能
    sum 求和
    cumsum 求前缀和
    mean 求平均数
    std 求标准差
    var 求方差
    min 求最小值
    max 求最大值
    argmin 求最小值索引
    argmax 求最大值索引
    >>>:np.sum(arr1)
    10
        
    # 累加和
    >>>:np.cumsum(arr2)
    array([ 1,  3,  6, 10, 15, 21, 28, 36], dtype=int32)
        
    >>>:arr5 = np.array([3,5,2,56,1,4,6])
    >>>:arr5
    array([ 3,  5,  2, 56,  1,  4,  6])
    # 求最小值的索引
    >>>:np.argmin(arr5)
    4
    
    
    

    3、随机数

    有关随机数的函数在np.random的子包当中。

    常用随机函数:

    函数 功能
    rand 给定形状产生随机数组(0到1之间的数)
    randint 给定形状产生随机整数
    chocie 给定形状产生随机选择
    shuffle 与random.shuffle相同
    uniform 给定形状产生随机数组
    # 形状
    >>>:np.random.rand(4,3)
    array([[0.21599854, 0.28993531, 0.31989618],
           [0.26206019, 0.69186237, 0.30819278],
           [0.21106428, 0.68874875, 0.58279413],
           [0.78623511, 0.80717789, 0.66939268]])
        
    # 起始,终结,形状
    >>>:np.random.randint(4,10,size=(2,3))
    array([[9, 6, 8],
           [4, 7, 5]])
    
    # 随机选择
    >>>:np.random.choice(4,5)
    array([1, 3, 2, 0, 1])
    >>>:np.random.choice([1,5,7,9],5)
    array([5, 9, 1, 7, 7])
        
    # 打乱
    >>>:arr7 = np.random.choice([1,2,3,4,5,7,9],5)
    >>>:arr7
    array([2, 5, 4, 5, 3])
    >>>:np.random.shuffle(arr7)
    >>>:arr7
    array([5, 3, 4, 2, 5])
    
    
    
  • 相关阅读:
    修改tomcat访问路径
    HTML img标签属性
    HTML marquee标签属性详解
    HTML input标签
    HTML iframe 标签
    Linux root默认密码问题
    [Linux]查看本机IP
    [Linux]命令行模式切换
    [Linux]命令root与other切换
    [Linux]XAMPP安装
  • 原文地址:https://www.cnblogs.com/bowendown/p/12709032.html
Copyright © 2011-2022 走看看