• python 数据分析----numpy


    NumPy是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础.

    NumPy的主要功能:

    • ndarray,一个多维数组结构,高效且节省空间
    • 无需循环对整组数据进行快速运算的数学函数
    • *读写磁盘数据的工具以及用于操作内存映射文件的工具
    • *线性代数、随机数生成和傅里叶变换功能
    • *用于集成C、C++等代码的工具

    安装方法:pip install numpy

    引用方式:import numpy as np

    NumPy的主要对象是同质多维数组它是一张表,所有元素(通常是数字)的类型都相同,并通过正整数元组索引.NumPy的数组的类称为ndarray别名为array

    创建ndarray:

    • array() 将列表转换为数组,可选择显式指定dtype
      In [17]: import numpy as np
      
      In [18]: a = np.array([2,3,4])
      
      In [19]: a
      Out[19]: array([2, 3, 4])
    • arange() range的numpy版,支持浮点数
      In [21]: a = np.arange(10,30,5)
      ##(10 ,30 是指定范围,5步长,步长支持小数)
      In [22]: a
      Out[22]: array([10, 15, 20, 25])
      
      
      In [23]: a = np.arange(10,30,0.5)
      
      In [24]: a
      Out[24]: 
      array([ 10. ,  10.5,  11. ,  11.5,  12. ,  12.5,  13. ,  13.5,  14. ,
              14.5,  15. ,  15.5,  16. ,  16.5,  17. ,  17.5,  18. ,  18.5,
              19. ,  19.5,  20. ,  20.5,  21. ,  21.5,  22. ,  22.5,  23. ,
              23.5,  24. ,  24.5,  25. ,  25.5,  26. ,  26.5,  27. ,  27.5,
              28. ,  28.5,  29. ,  29.5])
    • linspace() 类似arange(),第三个参数为数组长度
    • In [25]: a = np.linspace(0,2,9)
      
      ## 将【0,2】分成九份
      
      In [26]: a
      Out[26]: array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ,  1.25,  1.5 ,  1.75,  2.  ])
    • zeros() 根据指定形状和dtype创建全0数组
      In [28]: a = np.zeros((3,2),dtype=np.int64)
      #第一个参数是元祖,表明创建个几行几列的数据 
      # dtype 表示数据类型
      
      In [29]: a
      Out[29]: 
      array([[0, 0],
             [0, 0],
             [0, 0]])
    • ones() 根据指定形状和dtype创建全1数组
    • empty() 根据指定形状和dtype创建空数组(随机值)(函数empty内容是随机的并且取决于存储器的状态。默认情况下,创建的数组的dtype为float64)
    • eye() 根据指定边长和dtype创建单位矩阵

    ndarray基本属性:

      ndarray.ndim
        数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank
      ndarray.shape
      数组的维度。这是一个整数的元组,表示每个维度中数组的大小。对于具有n行和m列的矩阵,shape    将是(n,m)因此,shape元组的长度就是rank或维度的个数ndim
      ndarray.size
      数组元素的总数。这等于shape的元素的乘积。
      ndarray.dtype
      描述数组中元素类型的对象。可以使用标准Python类型创建或指定dtype。另外NumPy提供了自己的类型。例如numpy.int32、numpy.int16和numpy.float64。
      ndarray.itemsize
      数组中每个元素的字节大小。例如,元素为float64类型的数组的itemsize为8(=64/8),而complex32类型的数组的comitemsize为4(=32/8)。它等于ndarray.dtype.itemsize
      ndarray.data
      该缓冲区包含数组的实际元素。通常,我们不需要使用此属性,因为我们将使用索引访问数组中的元素。
     基本操作

    加减:

    数组和标量之间的运算

      a+1 a*3 1//a a**0.5

    同样大小数组之间的运算

    In [30]: a = np.array([20,30,40,50])
    
    In [31]: b = np.arange(4)
    
    In [32]: a
    Out[32]: array([20, 30, 40, 50])
    
    In [33]: b
    Out[33]: array([0, 1, 2, 3])
    
    In [34]: c = a - b
    
    In [35]: c
    Out[35]: array([20, 29, 38, 47])

    乘法运算符*的运算在NumPy数组中是元素级别的。

    可以使用dot函数或方法执行矩阵乘积:

    In [36]: a
    Out[36]: array([20, 30, 40, 50])
    
    In [37]: b
    Out[37]: array([0, 1, 2, 3])
    
    In [38]: a*b
    Out[38]: array([  0,  30,  80, 150])

    In [39]: a.dot(b)

    Out[39]: 260

    ###矩阵乘法复习:

    默认情况下,这些操作适用于数组,就像它是一个数字列表,而不管其形状。但是,通过指定axis参数,你可以沿着数组的指定轴应用操作:

    >>> b = np.arange(12).reshape(3,4)
    >>> b
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    >>>
    >>> b.sum(axis=0)                            # sum of each column
    array([12, 15, 18, 21])
    >>>
    >>> b.min(axis=1)                            # min of each row
    array([0, 4, 8])
    >>>
    >>> b.cumsum(axis=1)                         # cumulative sum along each row(每个数和这个数之前所有数的和)
    array([[ 0,  1,  3,  6],
           [ 4,  9, 15, 22],
           [ 8, 17, 27, 38]])

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

    常见通用函数:

    • 一元函数:abs(绝对值), sqrt(平方), exp, log, ceil, floor, rint, trunc, modf, isnan(判断是否是nan), isinf(判断是否是inf), cos, sin, tan
    • 二元函数:add, substract, multiply, divide, power, mod,  maximum, mininum

    索引、切片和迭代:

    一维数组索引:(和列表几乎差不多)

    In [49]: a
    Out[49]: array([20, 30, 40, 50])
    
    In [50]: a[1]
    Out[50]: 30

    二维/多维数组索引

    In [51]: b
    Out[51]: 
    array([[ 1,  2,  3,  4],
           [10, 11, 12, 13]])
    
    In [52]: b[1][2]
    Out[52]: 12
    
    In [53]: b[1,2]. #推荐这种
    Out[53]: 12

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

    In [59]: b
    Out[59]: 
    array([[ 1,  2,  3,  4],
           [10, 11, 12, 13]])
    
    In [60]: b<5
    Out[60]: 
    array([[ True,  True,  True,  True],
           [False, False, False, False]], dtype=bool)
    
    In [61]: b[b<5]
    Out[61]: array([1, 2, 3, 4])

    花式索引:(索引的值也是索引)

    对一个二维数组,选出其第一列和第三列,组成新的二维数组。

    In [64]: b
    Out[64]: 
    array([[ 1,  2,  3,  4],
           [10, 11, 12, 13]])
    
    In [65]: c = b[:,[1,3]] ##(里面的【1,3】指的是第1和3列)
    
    In [66]: c
    Out[66]: 
    array([[ 2,  4],
           [11, 13]])

    切片:

    In [67]: a
    Out[67]: array([20, 30, 40, 50])
    
    In [68]: a[1:3]
    Out[68]: array([30, 40])
    
    
    In [71]: b = np.arange(20).reshape(4,5)
    
    In [72]: b
    Out[72]: 
    array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14],
           [15, 16, 17, 18, 19]])
    
    In [73]: b[1:3]
    Out[73]: 
    array([[ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14]])

    与列表不同,数组切片时并不会自动复制,在切片数组上的修改会影响原数组。 【解决方法:copy()

    In [74]: a
    Out[74]: array([20, 30, 40, 50])
    
    In [75]: c = a[1:3]
    
    In [76]: c
    Out[76]: array([30, 40])
    
    In [77]: c[0] = 11
    
    In [78]: c
    Out[78]: array([11, 40])
    
    In [79]: a
    Out[79]: array([20, 11, 40, 50])
    
    In [80]: c = a[1:3].copy()
    
    In [82]: c
    Out[82]: array([11, 40])
    
    In [83]: c[0] = 99
    
    In [84]: c
    Out[84]: array([99, 40])
    
    In [85]: a
    Out[85]: array([20, 11, 40, 50])

    In [122]: b

    Out[122]: 

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

           [ 5,  6,  7,  8,  9],

           [10, 11, 12, 13, 14],

           [15, 16, 17, 18, 19]])

    In [123]: c = b[1:3,1:3]

    In [124]: c

    Out[124]: 

    array([[ 6,  7],

           [11, 12]])

    常用函数:

    • sum 求和
    • mean 求平均数
    • std 求标准差
    • var 求方差
    • min 求最小值
    • max 求最大值
    • argmin 求最小值索引
    • argmax 求最大值索引
    • rand 给定形状产生随机数组(0到1之间的数)
    • randint 给定形状产生随机整数
    • choice 给定形状产生随机选择
    • shuffle 与random.shuffle相同(重新洗牌,随机打乱)
    • uniform 给定形状产生随机数组

     

     
  • 相关阅读:
    hdu 刷题记录
    HDU step by step
    Codeforces Round #260 (Div. 2) B. Fedya and Maths
    Codeforces Round #260 (Div. 2) A. Laptops
    UVALive 6662 TheLastAnt
    UVALive 6661 Equal Sum Sets
    Codeforces Round #253 (Div. 2) A. Anton and Letters
    wikioi 3130 CYD刷题(背包)
    wikioi 1014 装箱问题(背包)
    [转]很特别的一个动态规划入门教程
  • 原文地址:https://www.cnblogs.com/mona524/p/7754132.html
Copyright © 2020-2023  润新知