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,替换之后的均值肯定会更小,所以一般的方式是把缺失的值替换为均值(中值)或者是删除有缺失的一行。

  • 相关阅读:
    JS截取文件后缀名
    百度地图API示例:使用vue添加删除覆盖物
    AttributeError: module 'tensorflow' has no attribute 'sub'
    ModuleNotFoundError: No module named 'numpy.core._multiarray_umath' ImportError: numpy.core.multiarray failed to import
    千锋很火的SpringBoot实战开发教程视频
    sublime text3 3176 注册码 License
    linux后台运行jar程序
    使用eclipse的SVN连接码云
    关于git上传文件的一个小问题
    js正则表达式,密码长度要大于6位,由数字和字母组成
  • 原文地址:https://www.cnblogs.com/Fantac/p/13779006.html
Copyright © 2011-2022 走看看