Numpy

作者: MA木易YA | 来源:发表于2019-03-07 21:13 被阅读0次

        NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。


    ndarray对象

        ndarray 对象是用于存放同类型元素的多维数组。

    • ndarray存储连续相同类型的数据,方便运算查找
    • ndarray支持并行化运算
    • 底层由C语言实现,无GIL限制,支持多线程

    numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

    image.png
    import numpy as np 
    a = np.array([1,2,3])  
    print (a)
    
    #输出
    [1, 2, 3]
    

    ndarray属性

    常用的就是形状和类型,可以在创建数组时指定data1 = np.array(shape=(2,3), dtype= float)

    image.png

    基本操作

    1. 生成数组

    image.png

    I. 生成0的数组
    numpy.zeros(shape, dtype = float, order = 'C')

    II. 生成1的数组
    numpy.ones(shape, dtype = None, order = 'C')

    III. 从现有数组生成

    • np.copy()
    • np.asarray()
    • np.array()
    • copyarray是浅拷贝,asarray是深拷贝

    IV. 生成固定范围的数组

    • np.linspace(a,b,c)——生成[a,b]间的c个数
    • np.arange(a,b,c)——生成[a,b)中步长为c的数

    V. 生成随机数

    • 均匀分布(每组可能性相等[low,high),size为输出样本数,元组/int类型) —— np.random.uniform(low,high,size)

    • 正态分布(波动程度、集中程度、稳定性等) —— np.random.normal(low,high,size)

    2. 切片索引

    这个类似python列表的索引和切片操作,可自行尝试研究

    import numpy as np
     
    a = np.arange(10)  
    b = a[2:7:2]   # 从索引 2 开始到索引 7 停止,间隔为 2
    print(b)
    
    #输出
    [2,4,6]
    

    3. 形状修改

    I. ndarray.reshape(shape)返回一个新的ndarray,但是不是行列直接转换,自动计算:ndarray.reshape(-1,b)
    II. ndarray.resize(shape)无返回值,直接更改原型
    III. ndarray.T,转置,行变成列,列变成行

    4. 类型修改

    I. ndarray.astype(type)
    II. ndarray.tostring()序列化到本地

    5. 数组去重

    I. np.unique(array)
    II. set操作,先用flatten()将多维数组转成一维再用set操作


    运算

    1. 逻辑运算

    • 布尔索引

    将boolean值作为参数用作条件判断

    stock_change = np.random.normal(0, 1, (8, 10))
        stock_change = stock_change[0:5, 0:5]
        #逻辑判断,如果大于0.5则标记为True,否则为False
        print(stock_change >0.5)
        print("******************************")
    
        #BOOLEAN赋值,将满足条件的设置指定值
        stock_change[stock_change > 0.5] = 1
        print(stock_change)
    
    
    #输出
    
    [[False  True False False False]
     [False False False False False]
     [False False False  True False]
     [ True False  True False  True]
     [False  True  True  True False]]
    ******************************
    [[-0.6644082   1.          0.12243582  0.09599675  0.0798174 ]
     [-2.62284685 -0.59904615 -0.27598282  0.20408988  0.37416402]
     [-1.2548002   0.04883909 -0.69198354  1.          0.05396606]
     [ 1.          0.26810907  1.         -1.08110028  1.        ]
     [ 0.07104746  1.          1.          1.          0.0382673 ]]
    
    • 通用判断函数

    I. np.all(),条件都满足则返回True,否则False

    np.all(stock_change[0:2, 0:5]>0 )
    
    #输出
    False
    

    II. np.or(),一个条件满足则返回True,全为False才返回False

    np.or(stock_change[0:2, 0:5]>0 )
    
    #输出
    True
    
    • 三元运算符np.where(a,b,c)

    a为条件(一组布尔值),b为返回True设置的值,c为返回False设置的值

    np.where(array>0,1,0)
    
    • 复合逻辑需要结合np.logical_and和np.logical_or使用
    np.where(np.logical_and(array>0,array<2),1,0)
    
    np.where(np.logical_or(array>0,array<2),1,0)
    

    2. 统计运算

    统计指标, min、max、mean(平均值)、median(中位数)、var(方差)、std(标准差)

    I. np.argmax()最大数所在位置

    • 注意是按行还是按列,指定axis轴——np.argmax(array, axis=1)

    II. 数组间运算

    • 数组与数——直接对组内进行运算,不同于python列表的运算

    III. 数组与数组

    并非任意数组间都能直接进行运算,需要满足广播机制

    IV. 广播机制

    当操作两个数组时,numpy会逐个比较它们的shape(构成的元组tuple),只有满足以下条件的数组间才能够进行运算:

    • 维度相等
    • shape(其中相对应的一个地方为1)

    将两个矩阵从右向左依次排开(数字为每个维度所含元素个数),按照如上条件判断,最终运算后的shape结果值取对应值的较大值。

    可运算:

    image.png

    不可运算:

    image.png

    3. 矩阵运算

    矩阵(matrix),必须是二维的,但array不同,array可为多维

    I. 二维数组
    np.mat()——将数组转化为矩阵

        array = np.array([[10,20],[20,30],[30,40]])
        print(type(array))
        print("************")
        mat = np.mat(array)
        print(type(mat))
    
    #输出
    <class 'numpy.ndarray'>
    ************
    <class 'numpy.matrixlib.defmatrix.matrix'>
      
    

    II. 矩阵相乘

    需要满足以下两点

    • 第一个矩阵的列数=第二个矩阵的行数,形成:(m,n)*(n,l) = (m,l)

    • 运算规则:

      SKX935RWX3ECSXA1VAVGG~Q.png
    • 矩阵乘法api
      • matmul
      • np,dot
      • mat形式矩阵可直接相乘,ndarray形式矩阵需要用上述方法相乘,或者使用array1 @ array2方式

    合并与分割

    I.合并(axis值不确定的话运行验证一下即可)

    • 水平合并
      • np.hstack((a,b))
      • concatenate((a,b), axis=1)
    • 竖直合并
      • np.vstack((a,b))
      • concatenate((a,b), axis=0)

    II. 分割
    numpy.split(ary, indices_or_sections, axis=0)

    image.png

    IO操作

    I. numpy读取
    np.genfromtxt('1.csv', delimiter=',')

    II. 缺失值&NAN
        numpy在处理字符串以及处理缺失值方面不如pandas省事,当读取文本中出现float形式或者有缺失值时会出现NAN,可自行做替换或者其他处理。

    相关文章

      网友评论

        本文标题:Numpy

        本文链接:https://www.haomeiwen.com/subject/kdcauqtx.html