zoukankan      html  css  js  c++  java
  • NumPy

    简介

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

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

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

    安装

    pip install numpy
    

    引用

    import numpy as np
    

    这是官方认证的导入方式,可能会有人说为什么不用from numpy import *,是因为在numpy 当中有一些方法与 Python 中自带的一些方法,例如maxmin等冲突,为了避免这些麻烦大家就约定俗成的都使用这种方法。



    为啥使用 numpy

    import numpy as np
    
    shop_car   = [12,2,3,6,4]  ### 购物车商品数量
    shop_price = [10,23,5,40,10]  ### 商品对应的价格
    
    ### 求一下,商品的总价格?
    
    shop_car_np = np.array(shop_car)   ### ndarray 一维数组
    shop_car_np
    

    array([12, 2, 3, 6, 4])

    shop_price_np = np.array(shop_price)
    shop_price_np
    

    array([10, 23, 5, 40, 10])

    shop_car_np * shop_price_np
    

    array([120, 46, 15, 240, 40])

    sum(shop_car_np * shop_price_np)
    

    461

    shop_car_np * 3
    

    array([36, 6, 9, 18, 12])


    创建 ndarry

    arr = np.array([1,2,3,3,5])
    
    arr  #### ndarray 一维数组
    

    array([1, 2, 3, 3, 5])

    arr2 =  np.array([ [1,2,3,4], [5,6,7,8],[1,2,3,4] ])
    arr2   #### ndarray 二维数组  2行4列数组
    
    array([[1, 2, 3, 4],
           [5, 6, 7, 8],
           [1, 2, 3, 4]])
    

    常见属性

    属性 描述
    T 数组的转置(对高维数组而言)
    dtype 数组元素的数据类型
    size 数组元素的个数
    ndim 数组的维数
    shape 数组的维度大小(以元组形式)
    arr
    

    array([1, 2, 3, 3, 5])

    arr.dtype   #### 数组元素的类型
    

    dtype('int64')

    arr.size  ### 数组元素的个数
    

    5

    arr.shape  #### 数组的维度,以元组的形式表示
    

    (5,)

    arr.ndim  ### 数组的维度,以整数的形式表示
    

    1

    arr2
    
    array([[1, 2, 3, 4],
           [5, 6, 7, 8],
           [1, 2, 3, 4]])
    
    arr2.shape
    

    (3, 4)

    arr2.ndim
    

    2

    arr2.T   #### 转置  把行变成列,把列变成行  对于高维数组而言
    
    array([[1, 5, 1],
           [2, 6, 2],
           [3, 7, 3],
           [4, 8, 4]])
    
    arr.dtype
    

    dtype('int64')

    arr
    

    array([1, 2, 3, 3, 5])

    arr.astype('float')  ####  astype() 强制转换一个数组的数据类型
    

    array([1., 2., 3., 3., 5.])


    数据类型

    类型 描述
    布尔型 bool_
    整型 int_ int8 int16 int32 int 64
    无符号整型 uint8 uint16 uint32 uint64
    浮点型 float_ float16 float32 float64
    复数型 complex_ complex64 complex128
    整型:
    int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数
    
    无符号整型:
    只能用来存正数,不能用来存负数
    
    补充:
    astype()方法可以修改数组的数据类型
    

    ndarry 的创建方式

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

    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

    np.arange?   #### ?的作用是查看当前函数的使用方法 
    
    arr = np.arange(0, 10, 2)
    arr
    

    array([0, 2, 4, 6, 8])

    np.linspace(2,10, num=5, endpoint=False)  # endpoint 不包含最后一个
    

    array([2. , 3.6, 5.2, 6.8, 8.4])

    np.zeros(10)
    

    array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

    np.ones(10)
    

    array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

    np.empty([2,4])
    
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    
    np.eye(5, dtype=int)   #### 对称矩阵
    
    array([[1, 0, 0, 0, 0],
           [0, 1, 0, 0, 0],
           [0, 0, 1, 0, 0],
           [0, 0, 0, 1, 0],
           [0, 0, 0, 0, 1]])
    
    arr
    

    array([1, 2, 3, 4, 5, 6])

    arr.reshape(2,3)  #### reshape将一维数组转换成二维数组
    
    array([[1, 2, 3],
           [4, 5, 6]]
    

    索引

    arr
    

    array([1, 2, 3, 4, 5, 6])

    arr[3]  ### 一维数组中的索引下边也是从0开始,取值的方式和python中的列表是一样的
    

    4

    arr2 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
    arr
    
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12]])
    
    arr2[0,1]  #### ,号前面是行索引,后面是列索引
    

    2

    arr2[0][1]  ### 第一个是行索引,第二个是列索引
    

    2


    切片

    arr
    

    array([1, 2, 3, 4, 5, 6])

    arr[0:4]   # 第一个到第四个
    

    array([1, 2, 3, 4])

    arr[:]   # 全部取出
    

    array([1, 2, 3, 4, 5, 6])

    arr[2:]   # 第二个到最后一个
    

    array([3, 4, 5, 6])

    arr[:4]   # 第一个到第四个
    

    array([1, 2, 3, 4])

    arr[::-1]   # 反转
    

    array([6, 5, 4, 3, 2, 1])

    总结:一维数组的切片和列表中的切片用法完全一样

    arr2
    
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12]])
    
    arr2[0:2,1:3]  ### ,号的前面截取的是行 ,后面截取的是列
    
    array([[2, 3],
           [6, 7]])
    

    arr2[:, :2]  # 所有的行取到第二列
    
    array([[ 1,  2],
           [ 5,  6],
           [ 9, 10]])
    

    数组向量运算和矢量运算

    两个数组之间是可以进行 size 运算的

    shop_car_np 
    shop_price_np
    

    array([12, 2, 3, 6, 4])

    array([10, 23, 5, 40, 10])

    shop_car_np + shop_price_np
    

    array([22, 25, 8, 46, 14])


    shop_car_np * 4
    

    array([48, 8, 12, 24, 16])


    布尔型索引

    arr
    

    array([1, 2, 3, 4, 5, 6])

    需求:得到大于 4 的所有值

    arr > 4
    

    array([False, False, False, False, True, True])


    arr[arr>4]  #### 可以将布尔型的结果当成索引传入到数组中,最终获取对应的True的值
    

    array([5, 6])


    花式索引

    arr
    

    array([1, 2, 3, 4, 5, 6])

    返回一个包含[2,4,5]的数组的值

    arr[ [1,3,4] ]   #### 索引中套列表,内层列表的值是想取得值的对应索引下标
    

    array([2, 4, 5])


    一元函数

    函数 功能
    abs、fabs 分别是计算整数和浮点数的绝对值
    sqrt 计算各元素的平方根
    square 计算各元素的平方
    exp 计算各元素的指数e**x
    log 计算自然对数
    sign 计算各元素的正负号
    ceil 计算各元素的ceiling值
    floor 计算各元素floor值,即小于等于该值的最大整数
    rint 计算各元素的值四舍五入到最接近的整数,保留dtype
    modf 将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似
    isnan 计算各元素的正负号
    isinf 表示那些元素是无穷的布尔型数组
    cos,sin,tan 普通型和双曲型三角函数
    np.abs(-4.5)
    

    4.5


    np.sqrt(4)  # 平方根
    

    2.0


    np.square([2,3,4,5])  # 平方
    

    array([ 4, 9, 16, 25])


    np.exp(3)  # e**3 
    

    20.085536923187668


    np.log(20)
    

    2.995732273553991


    np.ceil(4.3)  #### 向上取整
    

    5.0


    np.floor(4.6)  ### 向下取整
    

    4.0


    np.rint(4.3)  ### 四设五入
    

    4.0


    np.modf(5.6)
    

    (0.5999999999999996, 5.0)


    np.isnan() ### is 判断 nan :数据分析领域特定一个数据类型 not a number 不是一个数

    np.nan == np.nan
    

    Flase


    type(np.nan)
    

    float


    数学统计爱函数

    sum 求和
    cumsum 求前缀和
    mean 求平均数
    std 求标准差
    var 求方差
    min 求最小值
    max 求最大值
    argmin 求最小值索引
    argmax 求最大值索引
    arr
    

    array([1, 2, 3, 4, 5, 6])

    np.cumsum(arr)
    

    array([ 1, 3, 6, 10, 15, 21])

    np.mean(arr)  ### 平均数
    

    3.5

    np.var(arr)  #### 方差:((1-3.5)**2 + (2-3.5)**2 +) / 5
    

    2.9166666666666665

    np.std(arr) ### 方差开根号  得到标准差
    

    1.707825127659933


    随机数生成

    函数 功能
    rand 给定形状产生随机数组(0到1之间的数)
    randint 给定形状产生随机整数
    chocie 给定形状产生随机选择
    shuffle 与random.shuffle相同
    uniform 给定形状产生随机数组
    np.random.rand(10) ### 随机生成10个0-1之间的数
    
    array([0.62673264, 0.72358427, 0.84585648, 0.90063347, 0.12527228,
           0.49181793, 0.28931806, 0.6536062 , 0.14515325, 0.09002512])
    

    np.random.randint(0,10)  ### 生成一个0-10之间的随机整数
    

    5


    np.random.choice(5,3)  ### 生成三个0-5之间的数
    

    array([3, 2, 0])


    arr
    

    array([1, 2, 3, 4, 5, 6])

    np.random.shuffle(arr)
    arr
    

    array([1, 2, 3, 4, 6, 5])


    np.random.uniform(-1,0,1000)  # -1 到 0 直接 1000 个随机浮点数
    
  • 相关阅读:
    2、容器初探
    3、二叉树:先序,中序,后序循环遍历详解
    Hebbian Learning Rule
    论文笔记 Weakly-Supervised Spatial Context Networks
    在Caffe添加Python layer详细步骤
    论文笔记 Learning to Compare Image Patches via Convolutional Neural Networks
    Deconvolution 反卷积理解
    论文笔记 Feature Pyramid Networks for Object Detection
    Caffe2 初识
    论文笔记 Densely Connected Convolutional Networks
  • 原文地址:https://www.cnblogs.com/kai-/p/12605456.html
Copyright © 2011-2022 走看看