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

    轴(axis)

    在numpy中可以理解为方向,使用0、1、2...数字表示,对于一个一维数组,只有1个0轴,对于一个二维数组,有0、1轴,对于三维数组,有0、1、2轴。

    import numpy as np
    a = np.array(np.arange(24).reshape((4,3,2)))
                        
    print('取整个:')
    print(a[...])
    print(a)
    
    print('取行:')
    print(a[1])
    
    print('取连续多行:')
    print(a[:-1])
    
    print('取不连续多行:')
    print(a[1:3])
    
    print('取列:')
    print(a[:,2])
    
    print('取连续的多列:')
    print(a[:,:-1])
    
    print('取不连续的多列:')
    print(a[:,1:2])
    
    print('取多行多列:')
    print(a[:3,:2,])

    通过布尔索引修改数组的值

    import numpy as np
    a = np.array(np.arange(24).reshape((4,3,2)))
    
    print(a < 10)    #[[[ True  True]
                     #  [ True  True]
                     #  [ True  True]]
                    
                     # [[ True  True]
                     #  [ True  True]
                     #  [False False]]
                    
                     # [[False False]
                     #  [False False]
                     #  [False False]]
                    
                     # [[False False]
                     #  [False False]
                     #  [False False]]]
    a[a < 10]=0
    print(a)         #[[[ 0  0]
                     #  [ 0  0]
                     #  [ 0  0]]
                    
                     # [[ 0  0]
                     #  [ 0  0]
                     #  [10 11]]
                    
                     # [[12 13]
                     #  [14 15]
                     #  [16 17]]
                    
                     # [[18 19]
                     #  [20 21]
                     #  [22 23]]]
    a[a >= 10]=20
    print(a)         #[[[ 0  0]
                     #  [ 0  0]
                     #  [ 0  0]]
                    
                     # [[ 0  0]
                     #  [ 0  0]
                     #  [20 20]]
                    
                     # [[20 20]
                     #  [20 20]
                     #  [20 20]]
                    
                     # [[20 20]
                     #  [20 20]
                     #  [20 20]]]
    View Code

    ①np.arange()

    作用:创建自定义数组

    start:起始值,默认为0

    stop:终止值(不包含)

    step:步长,默认为1

    dtype:返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。

    import numpy as np
    a = np.arange(10,20,2,dtype = float)
    print(a)        #[10. 12. 14. 16. 18.]
    print(a.dtype)  #float64

    ②np.resize()

    作用:修改数组形状

    a = a.reshape((5,1))
    print(a)    #[[10.]
                # [12.]
                # [14.]
                # [16.]
                # [18.]]
    a = a.reshape((1,5))
    print(a)    #[[10. 12. 14. 16. 18.]]

    ③np.flatten()

    作用:将数据进行扁平化

    import numpy as np
    a = np.arange(10,dtype = float).reshape((2,5))
    print(a)              #[[0. 1. 2. 3. 4.]
                          #[5. 6. 7. 8. 9.]]
    print(a.flatten())    #[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

    ④np.array()

    作用:生成np.ndarray类型的数组

    import numpy as np
    a = np.array(np.arange(10))
    print(type(a),a)    #<class 'numpy.ndarray'> [0 1 2 3 4 5 6 7 8 9]

    ⑤np.astype()

    作用:修改数据的类型

    import numpy as np
    a = np.array(np.arange(5),dtype=np.bool)
    print(type(a),a)    # <class 'numpy.ndarray'> [False  True  True  True  True]
    
    a = a.astype(np.float32)
    print(type(a),a)    # <class 'numpy.ndarray'> [0. 1. 1. 1. 1.]

    ⑥np.round()

    作用:给数据指定取小数

    import numpy as np
    a = np.array([np.random.rand() for i in range(10)],dtype=np.float32)
    #取两位小数
    a = np.round(a,2)       #[0.8  0.84 0.95 0.26 0.17 0.56 0.55 0.89 0.17 0.58]
    print(a)

    ⑦np.where()

    作用:类似python的三目运算符

    import numpy as np
    a = np.array(np.arange(24).reshape((4,3,2)))
    a = np.where(a > 10,5,3)
    print(a)     #[[[3 3]
                 #  [3 3]
                 #  [3 3]]
                
                 # [[3 3]
                 #  [3 3]
                 #  [3 5]]
                
                 # [[5 5]
                 #  [5 5]
                 #  [5 5]]
                
                 # [[5 5]
                 #  [5 5]
                 #  [5 5]]]

    ⑧np.clip()

    作用:把数组的值限制在a_min,a_max之间,大于a_max就使这个值等于a_max,小于a_min就使这个值等于a_min

    import numpy as np
    a = np.array(np.arange(10).reshape((2,5,1)))
    a = a.clip(3,5)
    print(a)     #[[[3]
                 #  [3]
                 #  [3]
                 #  [3]
                 #  [4]]
                
                 # [[5]
                 #  [5]
                 #  [5]
                 #  [5]
                 #  [5]]]

    ⑨np.vstack()、np.hstack()

    作用:把数组进行垂直拼接和水平拼接

    import numpy as np
    a = np.array(np.arange(10))
    b = np.array(np.arange(10,20))
    print(a)                #[0 1 2 3 4 5 6 7 8 9]
    print(b)                #[10 11 12 13 14 15 16 17 18 19]
    
    #垂直拼接
    a_v_b = np.vstack((a,b))
    print(a_v_b)            #[[ 0  1  2  3  4  5  6  7  8  9]
                            # [10 11 12 13 14 15 16 17 18 19]]
    #水平拼接
    a_h_b = np.hstack(((a,b)))
    print(a_h_b)            #[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]

    ⑩np.argmax()、np.argmin()

    作用:找出最大或最小的参数

    import numpy as np
    a = np.array([np.random.randint(0,100) for i in range(10)])
    print(a)                            #[42 61 37 95 47  8 24 79 92 51]
    print('a maxarg:',np.argmax(a))     #a maxarg: 3
    print('a minarg:',np.argmin(a))     #a minarg: 5
    print('a max:',np.max(a))           #a max: 95
    print('a min:',np.min(a))           #a min: 8

    ⑪np.random.uniform()

    low:采样下界,float类型,默认值0

    high:采样上界,float类型,默认值1

    size:输出目标样本数目,可以int也可以tuple

    import numpy as np
    a = np.random.uniform(1,3,(2,3))        
    b = np.random.uniform(2,3,4)            
    print(a)        #[[1.99346576 1.58600127 1.00780443]
                    # [2.34397263 1.15202644 1.88763743]]
    print(b)        #[2.89086976 2.1703291  2.80912443 2.04031375]

    计算:

    例1:

    import numpy as np
    a = np.arange(20,dtype = float).reshape((2,5,2))
    # b = np.arange(40,dtype = float).reshape((4,5,2))
    
    print(a + 2)     # [[[ 2.  3.]
                     #  [ 4.  5.]
                     #  [ 6.  7.]
                     #  [ 8.  9.]
                     #  [10. 11.]]
                    
                     # [[12. 13.]
                     #  [14. 15.]
                     #  [16. 17.]
                     #  [18. 19.]
                     #  [20. 21.]]]
                     
    print(a - 2)    
                     # [[[-2. -1.]
                     #  [ 0.  1.]
                     #  [ 2.  3.]
                     #  [ 4.  5.]
                     #  [ 6.  7.]]
                    
                     # [[ 8.  9.]
                     #  [10. 11.]
                     #  [12. 13.]
                     #  [14. 15.]
                     #  [16. 17.]]]          
                     
    print(a * 2)     # [[[ 0.  2.]
                     #  [ 4.  6.]
                     #  [ 8. 10.]
                     #  [12. 14.]
                     #  [16. 18.]]
                   
                     # [[20. 22.]
                     #  [24. 26.]
                     #  [28. 30.]
                     #  [32. 34.]
                     #  [36. 38.]]]
                     
    print(a / 0)     # [[[nan inf]
                     #  [inf inf]
                     #  [inf inf]
                     #  [inf inf]
                     #  [inf inf]]
                    
                     # [[inf inf]
                     #  [inf inf]
                     #  [inf inf]
                     #  [inf inf]
                     #  [inf inf]]]  
    View Code 

    例2:

    特性:一些不同维度的数组也能够通过他们的后缘维度,即从末尾开始算起的维度的轴长度相符或者其中一方的长度为1,则认为他们是广播兼容的,广播会在缺失和长度为1的维度上进行。

    import numpy as np
    a1 = np.arange(20,dtype = float).reshape((2,5,2))
    b1= np.arange(10,dtype = float).reshape((5,2))
    print(a1 + b1)       #  [[[ 0.  2.]
                         #  [ 4.  6.]
                         #  [ 8. 10.]
                         #  [12. 14.]
                         #  [16. 18.]]
                        
                         # [[10. 12.]
                         #  [14. 16.]
                         #  [18. 20.]
                         #  [22. 24.]
                         #  [26. 28.]]]
    
    a2 = np.arange(20,dtype = float).reshape((2,5,2))
    b2 = np.arange(5,dtype = float).reshape((5,1))
    print(a2 + b2)       #  [[[ 0.  1.]
                         #  [ 3.  4.]
                         #  [ 6.  7.]
                         #  [ 9. 10.]
                         #  [12. 13.]]
                       
                         # [[10. 11.]
                         #  [13. 14.]
                         #  [16. 17.]
                         #  [19. 20.]
                         #  [22. 23.]]]

    其他:

    1.numpy中的nan(NAN,NAN):not a number表示的是不是一个数字,我们在读取本地文件为float时,如果有缺失,就会出现nan,像做了一个不合适的计算时。

    2.inf(-inf,inf):infinity.inf表示正无穷,-inf表示负正无穷

    import numpy as np
    a = np.nan
    b = np.nan
    
    #1.两个nan是不相等的
    print(a==b)                             #False
    print(a!=b)                             #True
    
    #2.判断数组中nan的个数
    c = np.array([1,2,np.nan,np.nan])
    print(np.count_nonzero(c!=c))           #2
    
    #3.判断数据是否为nan,并将它替换
    c[np.isnan(c)]=0
    print(c)                                #[1. 2. 0. 0.]
    
    #4.nan和任何值计算都为nan
    print(np.nan+6)                         #nan

    注意:

    在一组数据中单纯的把nan值替换为0,替换之前平均值如果都大于0,替换之后的均值肯定会更小,所以一般的方式是把缺失的值替换为均值(中值)或者是删除有缺失的一行。

  • 相关阅读:
    Oracle 按一行里某个字段里的值分割成多行进行展示
    Property or method "openPageOffice" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by
    SpringBoot 项目启动 Failed to convert value of type 'java.lang.String' to required type 'cn.com.goldenwater.dcproj.dao.TacPageOfficePblmListDao';
    Maven 设置阿里镜像
    JS 日期格式化,留作参考
    JS 过滤数组里对象的某个属性
    原生JS实现简单富文本编辑器2
    Chrome控制台使用详解
    android权限(permission)大全
    不借助第三方网站四步实现手机网站转安卓APP
  • 原文地址:https://www.cnblogs.com/Fantac/p/13779006.html
Copyright © 2011-2022 走看看