numpy学习摘要一

numpy

    • numpy 库
      • 创建数组
      • 数组计算
      • numpy 读取数据
      • 转置
      • 索引和切片
      • 值的修改
      • 三元运算符和裁剪
      • numpy中的nan是浮点类型
      • np.count_nonzero() 统计非0的个数/true的个数
      • numpy 中统计方法

numpy 库

创建数组

  • 创建 ndarry类型

    • a = np.array([1,2,3,4,5])
    • b = np.array(range(1,6))
    • c = np.arange(1,6)
      • 参数: start , stop, step , dtype
      • 起始 结束 步长 数据的类型
  • 方法:

    • a.dtype
      • a中的查看数据的类型
    • type(a)
      • 查看a时什么类型
      • numpy.adarray类型
  • 指定数组的数据类型

    • t4 = np.array(range(1,4),dtype="i1") --> i1:int8类型
    • 使用dtype来指定
      -数据类型有(有符号和无符号)
      • int8 uint8 --> 简写为 i1 u1
      • int16 uint16 --> 简写为 i2 u2
      • int32 uint32 --> 简写为 i4 u4
      • int64 uint64 --> 简写为 i8 u8
      • float16 --> 简写为 f2
      • float32 --> 简写为 f4/f
      • float64 --> 简写为 f8/d
      • bool --> 简写为 ? 布尔值
  • 修改数组的数据类型

    • t4.astype(“float16”)
  • 修改浮点型的小数位数

    • np.round(t4,2)
    • 保留两位
  • 查看数组的形状

    • t1 = np.arange(12)
    • t1.shape()
      • 查看t1的形状
      • 一个数是:一维;两个数是:两维;三个数是:三维
  • 设置数组的形状:

    • t1.reshape((3,4))
    • t1 掉用reshape后本身是不会发生变化的,他有一个返回值
  • 数组中数据的个数

    • 二维举例:
      • t1.shape[0]*t1.shape[1]
      • 行 * 列
  • 将数组改变后才能一维的数组

    • 二维:
      • t1 = t1.reshape((t1.shape[0]*t1.shape[1],))
      • t1.flatten()

数组计算

  • 数组和一个数字做加、减、乘、除(+,-,*,/)

    • 数组中的所有数据都和这个数做运算
    • 如果这个数组除以0 的话,会出先一个警告,结果中有个nan和inf
    • nan 是 0/0 的结果
    • inf 是 数/0 的结果
    In [1]: import numpy as np
    
    In [2]: t1 = np.array(range(24)).reshape((4,6))
    
    In [3]: t1
    Out[3]:
    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]])
    
    In [4]: t1+2
    Out[4]:
    array([[ 2,  3,  4,  5,  6,  7],
           [ 8,  9, 10, 11, 12, 13],
           [14, 15, 16, 17, 18, 19],
           [20, 21, 22, 23, 24, 25]])
    
    In [5]: t1/0
    E:\Anaconda3\envs\django\Scripts\ipython:1: RuntimeWarning: divide by zero encountered in true_divide
    E:\Anaconda3\envs\django\Scripts\ipython:1: RuntimeWarning: invalid value encountered in true_divide
    Out[5]:
    array([[nan, inf, inf, inf, inf, inf],
           [inf, inf, inf, inf, inf, inf],
           [inf, inf, inf, inf, inf, inf],
           [inf, inf, inf, inf, inf, inf]])
    
    In [6]:
    
  • 数组和数组计算

    • 加减乘除的运算的时候
    • 数组的形状一样的时候,是对应的位置进行计算
    • 维度不一样的时候:
      • 某些维度相同的时候
        • 在相同的维度上进行运算
      • 所有维度不相同的时候
        • 会报错
    • 举例:
      • (3,3,3)和(3,2) -> 不能进行计算
      • (3,3,2)和(3,2) -> 可以进行计算
      • (3,3,2)和(3,3,) -> 可以进行计算
    In [6]: t2 = np.arange(100,124).reshape((4,6))                              
                                                                                
    In [7]: t2                                                                  
    Out[7]:                                                                     
    array([[100, 101, 102, 103, 104, 105],                                      
           [106, 107, 108, 109, 110, 111],                                      
           [112, 113, 114, 115, 116, 117],                                      
           [118, 119, 120, 121, 122, 123]])                                     
                                                                                
    In [8]: t1                                                                  
    Out[8]:                                                                     
    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]])                                           
                                                                                
    In [9]: t1+t2                                                               
    Out[9]:                                                                     
    array([[100, 102, 104, 106, 108, 110],                                      
           [112, 114, 116, 118, 120, 122],                                      
           [124, 126, 128, 130, 132, 134],                                      
           [136, 138, 140, 142, 144, 146]])                                     
                                                                                
    In [10]: t1*t2                                                              
    Out[10]:                                                                    
    array([[   0,  101,  204,  309,  416,  525],                                
           [ 636,  749,  864,  981, 1100, 1221],                                
           [1344, 1469, 1596, 1725, 1856, 1989],                                
           [2124, 2261, 2400, 2541, 2684, 2829]])                               
                                                                                
    In [11]: t1/t2                                                              
    Out[11]:                                                                    
    array([[0.        , 0.00990099, 0.01960784, 0.02912621, 0.03846154,         
            0.04761905],                                                        
           [0.05660377, 0.06542056, 0.07407407, 0.08256881, 0.09090909,         
            0.0990991 ],                                                        
           [0.10714286, 0.11504425, 0.12280702, 0.13043478, 0.13793103,         
            0.14529915],                                                        
           [0.15254237, 0.15966387, 0.16666667, 0.17355372, 0.18032787,         
            0.18699187]])                                                       
                                                                                
    In [12]: t3 = np.arange(0,6)
    
    In [13]: t1-t3
    Out[13]:
    array([[ 0,  0,  0,  0,  0,  0],
           [ 6,  6,  6,  6,  6,  6],
           [12, 12, 12, 12, 12, 12],
           [18, 18, 18, 18, 18, 18]])
    
    In [14]: t3
    Out[14]: array([0, 1, 2, 3, 4, 5])
    
    In [15]: t4 = np.arange(4).reshape((4,1))
    
    In [16]: t1-t4
    Out[16]:
    array([[ 0,  1,  2,  3,  4,  5],
           [ 5,  6,  7,  8,  9, 10],
           [10, 11, 12, 13, 14, 15],
           [15, 16, 17, 18, 19, 20]])
    In [17]: t5 = np.arange(9)
    
    In [18]: t5
    Out[18]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])
    
    In [19]: t1-t5
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
     in 
    ----> 1 t1-t5
    
    ValueError: operands could not be broadcast together with shapes (4,6) (9,)
    
    In [20]:
    

numpy 读取数据

  • np.loadtxt(frame,dtype=np.float,delimiter=None,skiprow=0,usecols=None,unpack=False)
    • frame:
      • 文件的路径
    • dtype:
      • 数据后的类型,默认为float
    • delimiter:
      • 分隔字符串的字符,默认为空字符串
    • skiprows:
      • 跳过x行,一般跳过表头
    • usecols:
      • 读取指定的列,元组
    • unpack:
      • 表示转置

转置

  • t2 = np.arange(24).reshape((4,6))
  • t2.transpose()
  • t2.T
  • t2.swapaxes(1,0) # 转换 1轴和0轴
In [3]: t2 = np.arange(24).reshape((4,6))

In [4]: t2
Out[4]:
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]])

In [5]: t2.transpose()
Out[5]:
array([[ 0,  6, 12, 18],
       [ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21],
       [ 4, 10, 16, 22],
       [ 5, 11, 17, 23]])

In [6]: t2.T
Out[6]:
array([[ 0,  6, 12, 18],
       [ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21],
       [ 4, 10, 16, 22],
       [ 5, 11, 17, 23]])

In [9]: t2.swapaxes(1,0)
Out[9]:
array([[ 0,  6, 12, 18],
       [ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21],
       [ 4, 10, 16, 22],
       [ 5, 11, 17, 23]])

In [10]:

索引和切片

  • 取行 2
    • t2[2]
  • 取连续的多行 2-
    • t2[2:]
  • 取不连续的多行 2、8、10
    • t2[[2,8,10]]
  • 取行和列
    • t2[行,列]
  • 取第一列
    • t2[:,0]
  • 取连续的多列 第三列后面的所有列
    • t2[:,2:]
  • 取不连续的多列 第一列和第三列
    • t2[:,[0,2]]
  • 取行和列 ,第三行第四列
    • t2[2,3]
    • 取出来一个数字,类型为numpy.int64/…
  • 取多行多列
    • 取第3行到第5行,第2列到第4列
    • t2[2:5,1:4]
  • 取多个不相邻的点, (0,0)(2,1)位置的点
    • t2[[0,2],[0,1]]
    • 选出来的是一个列表

值的修改

  • t2[:,2:4] = 0
  • 第3列到5列的值更改成0

In [10]: t2
Out[10]:
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]])

In [11]: t2<10
Out[11]:
array([[ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True, False, False],
       [False, False, False, False, False, False],
       [False, False, False, False, False, False]])

In [13]: t2[t2<10] = 3

In [14]: t2
Out[14]:
array([[ 3,  3,  3,  3,  3,  3],
       [ 3,  3,  3,  3, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

三元运算符和裁剪

  • np.where(t2<10,0,10)
    • t2中的数据小于10的替换成0其他情况替换成10
  • t2.clip(10,18)
    • 把小于10的替换成10,大于18的替换成18

numpy中的nan是浮点类型

  • 将数据赋值成nan
    • t[3,3] = np.nan
    • 前提是t中的数据是float类型
    • np.astype(float) 转换
    In [27]: t2.astype(float)
    Out[27]:
    array([[ 3.,  3.,  3.,  3.,  3.,  3.],
           [ 3.,  3.,  3.,  3., 10., 11.],
           [12., 13., 14., 15., 16., 17.],
           [18., 19., 20., 21., 22., 23.]])
    
    In [28]: t2[t2>20] = np.nan
    
    In [29]: t2
    Out[29]:
    array([[ 3.,  3.,  3.,  3.,  3.,  3.],
           [ 3.,  3.,  3.,  3., 10., 11.],
           [12., 13., 14., 15., 16., 17.],
           [18., 19., 20., nan, nan, nan]])
    
  • nan 和 inf
    • nan
      • not a number
      • 数据缺失会出现 nan
      • 无穷大(inf)减去一个无穷大
      • 浮点类型
      • 两个nan是不相等的
        • np.nan == np.nan Out[17]: False
      • 判断
        • np.isnan()
        • t2!=t2
        • 判断t2中对应位置的数值是否相等,nan是不相等的,其他的是相等的
        In [34]: t2!=t2
        Out[34]:
        array([[False, False, False, False, False, False],
               [False, False, False, False, False, False],
               [False, False, False, False, False, False],
               [False, False, False,  True,  True,  True]])
        In [36]: np.isnan(t2)
        Out[36]:
        array([[False, False, False, False, False, False],
               [False, False, False, False, False, False],
               [False, False, False, False, False, False],
               [False, False, False,  True,  True,  True]])
        
    • nan 和 任何数计算都为nan
    • 很多情况下会将nan赋值为均值/中位数,或删除缺失值的一行
  • inf
    • infinity
    • 正无穷
    • -inf:负无穷
    • 一个数/0时会出现inf
    • 浮点类型

np.count_nonzero() 统计非0的个数/true的个数

  • 判断数组中不为0的个数
In [29]: t2
Out[29]:
array([[ 3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3., 10., 11.],
       [12., 13., 14., 15., 16., 17.],
       [18., 19., 20., nan, nan, nan]])

In [30]: np.count_nonzero(t2)
Out[30]: 24

In [31]: t2[:,0] = 0

In [32]: np.count_nonzero(t2)
Out[32]: 20
In [35]: np.count_nonzero(t2!=t2)
Out[35]: 3
In [37]: np.count_nonzero(np.isnan(t2))
Out[37]: 3

numpy 中统计方法

  • np.sum()
    • np.sum(t2,axis=0) # 计算列的和
    • np.sum(t2,axis=1) # 计算行的和
    • 没有指定的话是总和
    • 有nan则为nan
  • 求和
    • t2.sum(axis=None)
  • 均值
    • t2.mean(axis=None)
  • 中值
    • np.median(t2,axis=None)
  • 最大值
    • t2.max(axis=None)
  • 最小值
    • t2.min(axis=None)
  • 极值
    • np.ptp(t2,axis=None)
      • 最大值和最小值的差
  • 标准差
    • t2.std(axis=None)
    • 一组数据距离平均值的分散程度
      • 反应出数据的波动和稳定情况
      • 越大越不稳定

你可能感兴趣的:(python,#,数据分析,numpy,python,数据分析)