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])
    
    
    
  • 相关阅读:
    Working with WordprocessingML documents (Open XML SDK)
    How to Choose the Best Way to Pass Multiple Models in ASP.NET MVC
    Azure:Manage anonymous read access to containers and blobs
    Convert HTML to PDF with New Plugin
    location.replace() keeps the history under control
    On the nightmare that is JSON Dates. Plus, JSON.NET and ASP.NET Web API
    HTTP Modules versus ASP.NET MVC Action Filters
    解读ASP.NET 5 & MVC6系列(6):Middleware详解
    Content Negotiation in ASP.NET Web API
    Action Results in Web API 2
  • 原文地址:https://www.cnblogs.com/bowendown/p/12709032.html
Copyright © 2011-2022 走看看