zoukankan      html  css  js  c++  java
  • 利用数组进行数据处理

    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])
  • 相关阅读:
    [Python]解决ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out
    Objective C XPC 初步学习<一>
    Vue的渣渣成长之路 第一章 登陆界面(vue+element+axios)以下文章感谢璋,威的同事给了我很大的帮助
    vue详情 恢复 删除
    vue添加
    vue显示详情加入回收站
    linq修改单条数据
    linq详情
    linq显示
    8.11模拟总结
  • 原文地址:https://www.cnblogs.com/654321cc/p/9074819.html
Copyright © 2011-2022 走看看