zoukankan      html  css  js  c++  java
  • 数据分析 -numpy

    numpy:
        
        1. numpy的属性:
            1.T : 转置 
                li1 = [
                        [1,2,3],
                        [4,5,6]
                    ] 
                a = np.array(li1)
                a.T
                执行结果:
                array([[1, 4],
                       [2, 5],
                       [3, 6]])
                就相当于是将行变成列,列变成行,它也是一个比较常用的方法        
            2.dtype:  数据类型
                布尔型    bool_    
                整型    int_ int8 int16 int32 int 64    
                无符号整型    uint8 uint16 uint32 uint64    
                浮点型    float_ float16 float32 float64    
                复数型    complex_ complex64 complex128
                
                注:astype()方法可以修改数组的数据类型        
            3.size: 个数
                a = np.array([3,8,7,4])
                a.size
                执行结果:
                4        
            4.ndim: 维度 返回的整数
                a = np.array([3,8,7,4])
                a.ndim
                执行结果
                1
                b = a.reshape(2,2)
                b
                执行结果
                array([[3, 8],
                      [7, 4]])
                b.ndim
                执行结果
                2
            5.shape:维度 返回的元组
                b = a.reshape(2,2)
                b.shape
                执行结果
                (2, 2)
            
        2. 创建ndarray的方式:
            1、arange():
                注:
                    数组对象内的元素类型必须相同
                    数组大小不可修改
                np.arange(1.2,10,0.4)
                执行结果:
                array([1.2, 1.6, 2. , 2.4, 2.8, 3.2, 3.6, 4. , 4.4, 4.8, 5.2, 5.6, 6. ,
                       6.4, 6.8, 7.2, 7.6, 8. , 8.4, 8.8, 9.2, 9.6])
            -----------------------------------------------------------------
            2、linspace()
                np.linspace(1,10,20)
                执行结果:
                array([ 1.        ,  1.47368421,  1.94736842,  2.42105263,  2.89473684,
                        3.36842105,  3.84210526,  4.31578947,  4.78947368,  5.26315789,
                        5.73684211,  6.21052632,  6.68421053,  7.15789474,  7.63157895,
                        8.10526316,  8.57894737,  9.05263158,  9.52631579, 10.        ])
                # arange是顾头不顾尾,
                # 而这个方法是顾头又顾尾,每个数字之间的距离相等的,前后两个数做减法肯定相等
            ----------------------------------------------------------------
            3、zeros()
                np.zeros((3,4))
                执行结果:
                array([[0., 0., 0., 0.],
                       [0., 0., 0., 0.],
                       [0., 0., 0., 0.]])
                # 会用0生成三行四列的一个多维数组
            ---------------------------------------------------------------------
            4、ones()
                np.ones((3,4))
                执行结果:
                array([[1., 1., 1., 1.],
                       [1., 1., 1., 1.],
                       [1., 1., 1., 1.]])
                # 会用1生成三行四列的一个多维数组
            ------------------------------------------------------------------------
            5、empty()
                np.empty(10)
                执行结果:
                array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
                # 这个方法只申请内存,不给它赋值
            -----------------------------------------------------------------------
            6、eye()
                np.eye(5)
                执行结果:
                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.]])        
        3.索引与切片
            0. reshape 改变数组的维度与形状
                res = np.array([3,9,3,3,3,3,3,3,3,3,3,5,399999,9,33])
                res.reshape(5,3)
                
                array([[     3,      9,      3],
                       [     3,      3,      3],
                       [     3,      3,      3],
                       [     3,      3,      5],
                       [399999,      9,     33]])
                        
            1. 一维数组的索引和切片 跟 python的列表和切片一样
               高维数组的索引和切片,(行索引/切片,列索引/切片) 
                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]])
                       
                arr[1:4,1:4]   # 切片方式
                执行结果:
                array([[ 7,  8,  9],
                       [13, 14, 15],
                       [19, 20, 21]])
            2. 布尔型索引   ********
                li = [random.randint(1,10) for _ in range(30)]
                a = np.array(li)
                a[a>5]
                执行结果:
                array([10,  7,  7,  9,  7,  9, 10,  9,  6,  8,  7,  6])
            
            3. 花式索引  [[索引的下标]]   *********
                x = numpy.array([1,2,3,4,5,6])
                print x[[0,1,2]] # [1 2 3]
                print x[[-1,-2,-3]] # [6,5,4]
                x = numpy.array([[1,2],[3,4],[5,6]])
                print x[[0,1]] # [[1,2],[3,4]]
                print x[[0,1],[0,1]] # [1,4] 打印x[0][0]和x[1][1]
                print x[[0,1]][:,[0,1]] # 打印01行的01列 [[1,2],[3,4]]
                # 使用numpy.ix_()函数增强可读性
                print x[numpy.ix_([0,1],[0,1])] #同上 打印01行的01列 [[1,2],[3,4]]
                x[[0,1],[0,1]] = [0,0]
                print x # [[0,2],[3,0],[5,6]]
                注:
                    1.花式索引生成一个新的数组,不像切片,花式索引生成的是新的数据对象
                    2.由于花式索引不同于切片,实现的是拷贝功能,生成的新数组改变不会影响元数据
            4. 通用函数 
                一元函数:
                    abs、fabs    分别是计算整数和浮点数的绝对值    
                    sqrt    计算各元素的平方根    
                    square    计算各元素的平方    
                    exp    计算各元素的指数e**x    
                    log    计算自然对数    
                    sign    计算各元素的正负号    
                    ceil    计算各元素的ceiling值    
                    floor    计算各元素floor值,即小于等于该值的最大整数    
                    rint    计算各元素的值四舍五入到最接近的整数,保留dtype    
                    modf    将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似    
                    isnan    计算各元素的正负号    
                    isinf    表示那些元素是无穷的布尔型数组    
                    cos,sin,tan    普通型和双曲型三角函数
                二元函数:
                    add    将数组中对应的元素相加    
                    subtract    从第一个数组中减去第二个数组中的元素    
                    multiply    数组元素相乘    
                    divide、floor_divide    除法或向下圆整除法(舍弃余数)    
                    power    对第一个数组中的元素A,根据第二个数组中的相应元素B计算A**B    
                    maximum,fmax    计算最大值,fmax忽略NAN    
                    miximum,fmix    计算最小值,fmin忽略NAN    
                    mod    元素的求模计算(除法的余数)
                
            
            5. 数学计算函数
                sum    求和    
                cumsum    求前缀和    
                mean    求平均数    
                std    求标准差    
                var    求方差    
                min    求最小值    
                max    求最大值    
                argmin    求最小值索引    
                argmax    求最大值索引
            
            6. 随机数
                rand    给定形状产生随机数组(0到1之间的数)    
                randint    给定形状产生随机整数    
                chocie    给定形状产生随机选择    
                shuffle    与random.shuffle相同    
                uniform    给定形状产生随机数组
    相关案例:
    np.add(arr,arr1)
    > array([5, 5, 9, 9, 6]) ------------------------------------------------------------------------- # subtract 从第一个数组中减去第二个数组中的元素 np.subtract(arr,arr1) > array([-5, -3, 7, -5, 6]) ------------------------------------------------------------------------- # multiply 数组元素相乘 np.multiply(arr,arr1) > array([ 0, 4, 8, 14, 0]) np.random.rand(2,2,2) > array([[[0.37992696, 0.18115096], [0.78854551, 0.05684808]], [[0.69699724, 0.7786954 ], [0.77740756, 0.25942256]]]) ------------------------------------------------------------------------- # randn 返回给定维度的随机数组 np.random.randn(2,4) > array([[ 0.76676877, 0.21752554, 2.08444169, 1.51347609], [-2.10082473, 1.00607292, -1.03711487, -1.80526763]]) ------------------------------------------------------------------------- # randint 返回给定区间的随机整数 np.random.randint(0,20) > 15 ------------------------------------------------------------------------- # chocie 给定的一维数组中随机选择 np.random.choice(9,3) # # 从np.range(9)中,(默认)有放回地等概率选择三个数 > array([5, 8, 2]) np.random.choice(9,3,replace=False) # 无放回地选择 > array([1, 2, 0]) ------------------------------------------------------------------------ # shuffle 原列表上将元素打乱(与random.shuffle相同) arr = np.arange(10) np.random.shuffle(arr) arr > array([4, 5, 0, 3, 7, 8, 9, 1, 2, 6]) ------------------------------------------------------------------------ # uniform 给定形状产生随机数组 np.random.uniform(0,1,[3,3,3]) > array([[[0.80239474, 0.37170323, 0.5134832 ], [0.42046889, 0.40245839, 0.0812019 ], [0.8788738 , 0.48545176, 0.73723353]], [[0.79057724, 0.80644632, 0.65966656], [0.43833643, 0.53994887, 0.46762885], [0.44472436, 0.08944074, 0.34148912]], [[0.7042795 , 0.58397044, 0.13061102], [0.22925123, 0.97745023, 0.14823085], [0.6960559 , 0.07936633, 0.91221842]]]) ------------------------------------------------------------------------ # seed 设定随机种子(使相同参数生成的随机数相同) np.random.seed(0) # 当seed(0)时生成以下随机数组 np.random.rand(5) > array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ]) np.random.seed(2) # send(5)时生成以下随机数组 np.random.rand(5) > array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ]) np.random.seed(0) # 再次使用send(0)会发现返回最开始的随机数组 np.random.rand(5) > array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ]) ------------------------------------------------------------------------ # standard_normal 生成正态分布的随机样本数 np.random.standard_normal([2,10]) > array([[-0.17937969, -0.69277058, 1.13782687, -0.16915725, -0.76391367, -0.4980731 , -0.36289111, 0.26396031, -0.62964191, -0.4722584 ], [-1.51336104, 1.10762468, 0.17623875, -0.94035354, 0.92959433, -1.06279492, -0.88640627, 1.92134696, -0.45978052, -1.08903444]]) np.random和Python原生的random的区别: 比较内容 random np.random 输入类型 非空的列表类型(包括列表、字符串和元组) 非空的列表类型(包括列表、字符串和元组)+ numpy.array类型 输出维度 一个数或一个list(多个数) 可指定复杂的size 指定(a,b)范围 可以 整数可指定,浮点数不行,需自行转换 批量输出 不可 可。通过指定size参数 特定分布 涵盖了常用的几个分布; 只能单个输出 几乎涵盖了所有分布;可批量输出
          补充点:
             浮点数特殊值:
                1.nan(Not a Number):不等于任何浮点数(nan != nan)
                    应用场景:用来标识缺失值
                2.inf(infinity):比任何浮点数都大
  • 相关阅读:
    Gitlab + Gitlab runner + Window powershell
    python 连接SAP 代码
    【翻译】 For OData For C# play on RESTier
    SAP -熟练使用T-Code SHD0
    SAP MM- BAPI_PO_CHANGE 更新PO version 信息(version management)
    SAP PP- OPK8生产订单打印 配置Smart form.
    SAP Smart Form 无法通过程序自定义默认打印机问题解决
    SAP APO-主数据设置
    SAP APO-PP / DS
    SAP APO-供需匹配
  • 原文地址:https://www.cnblogs.com/wyf20190411-/p/13903570.html
Copyright © 2011-2022 走看看