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 给定形状产生随机数组

 

 
原文地址:https://www.cnblogs.com/mona524/p/7754132.html