• 利用数组进行数据处理


    Part 1

      numpy数组使你可以将许多数据处理任务表述为间接的数组表达式(否则需要编写循环)。用数组表达式代替循环的做法,通常被称为矢量化。一般来说,矢量化数组运算要比等价的纯python方式要快上一两个数量级(甚至更多),尤其是各种数值计算。

    import numpy as np
    points = np.arange(-5,5,0.01)
    x,y = np.meshgrid(points,points)
    y
    array([[-5.  , -5.  , -5.  , ..., -5.  , -5.  , -5.  ],
           [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],
           [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],
           ...,
           [ 4.97,  4.97,  4.97, ...,  4.97,  4.97,  4.97],
           [ 4.98,  4.98,  4.98, ...,  4.98,  4.98,  4.98],
           [ 4.99,  4.99,  4.99, ...,  4.99,  4.99,  4.99]])
    import matplotlib.pyplot as plt
    z = np.sqrt(x**2+y**2)
    z
    array([[7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985,
            7.06400028],
           [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
            7.05692568],
           [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
            7.04985815],
           ...,
           [7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603,
            7.04279774],
           [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
            7.04985815],
           [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
            7.05692568]])
    plt.title('Image plot of $sqrt{x^2+y^2}$ for a grid of values')
    plt.imshow(z,cmap=plt.cm.gray);plt.colorbar()

    Part 2

      将条件逻辑表述为数组运算

      numpy.where 是三元表达式的矢量化版本。  

      官方文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html   

    In [1]: import numpy as np
    
    In [2]: xarr = np.array([1.1,1.2,1.3])
    
    In [3]: yarr = np.array([2.1,2.2,2.3])
    
    In [4]: cond = np.array([True,False,True])
    
    In [5]: result = np.where(cond,xarr,yarr)
    
    In [6]: result
    Out[6]: array([1.1, 2.2, 1.3])

      np.where的第二个和第三个参数不必是数组。它们都可以是标量值。在数据分析工作中,where通常用于根据另一个数组而产生一个新的数组。

      假设有一个由随机数据组成的矩阵。你希望将所有正值替换为2,将所有负值替换为-2。利用np.where,则会非常简单。

    arr = randn(4,4)
    arr
    array([[-3.54522971,  1.68063071,  1.1204201 ,  1.13209986],
           [ 0.40560108, -0.25336595,  0.32044861, -1.39082664],
           [ 0.2424607 ,  1.24353322, -2.02133435, -0.60433901],
           [-0.82997538,  1.00716739,  0.37567233,  0.90534339]])
    numpy.where(arr>0,2,-2)
    array([[-2,  2,  2,  2],
           [ 2, -2,  2, -2],
           [ 2,  2, -2, -2],
           [-2,  2,  2,  2]])

    Part 3

      唯一化以及其它的集合逻辑

      unique(x)  计算x中的唯一元素,并返回有序结果

    In [1]: import numpy as np
    
    In [2]: np.unique(np.array([1,3,4,3]))
    Out[2]: array([1, 3, 4])

      intersect1d(x,y)  计算 x 和 y 中的公共元素,并返回有序结果

    In [4]: np.intersect1d(np.array([1,2,3]),np.array([2,3,4]))
    Out[4]: array([2, 3])

      union1d(x,y)

    In [5]: np.union1d(np.array([1,2,3]),np.array([2,3,4]))
    Out[5]: array([1, 2, 3, 4])

      in1d(x,y)  得到一个表示 x 的元素是否包含于 y 的布尔型数组

    In [6]: np.in1d(np.array([1,2,3]),np.array([2,3,4]))
    Out[6]: array([False,  True,  True])

      setdiff1d(x,y)  集合的差,即元素在 x 中且不再 y 中

    In [7]: np.setdiff1d(np.array([1,2,3]),np.array([2,3,4]))
    Out[7]: array([1])

      setxor1d(x,y)  集合的对称差,即存在于一个数组中,但不同时存在于两个数组中的元素。简单来说,就是“异或”

    In [8]: np.setxor1d(np.array([1,2,3]),np.array([2,3,4]))
    Out[8]: array([1, 4])
  • 相关阅读:
    每日一题 为了工作 2020 0412 第四十一题
    每日一题 为了工作 2020 04011 第四十题
    每日一题 为了工作 2020 0410 第三十九题
    每日一题 为了工作 2020 0409 第三十八题
    每日一题 为了工作 2020 0408 第三十七题
    每日一题 为了工作 2020 0407 第三十六题
    每日一题 为了工作 2020 0406 第三十五题
    每日一题 为了工作 2020 0405 第三十四题
    学习总结(二十四)
    学习总结(二十三)
  • 原文地址:https://www.cnblogs.com/654321cc/p/9074819.html
Copyright © 2020-2023  润新知