zoukankan      html  css  js  c++  java
  • Numpy_05 数据处理

    github博客传送门
    csdn博客传送门

    Numpy系列

    Numpy_01 创建 指定数据类型 查看维度和数据类型 简单的数学运算
    Numpy_02 索引和切片
    Numpy_03 转置和轴对换
    Numpy_04 通用函数
    Numpy_05 数据处理
    Numpy_06 数组的文件输入输出 线性代数

    利用数组进行数据处理

    import numpy as np
    
    points = np.arange(-5, 5, 1)  # 100个等间距点
    xs, ys = np.meshgrid(points, points)  # 接收两个一维数组 返回两个二维数组
    print('xs:
    ', xs)  # 返回一个 数组元素个数这么多行的二维数组 内容和一维的数组一样
    print('ys:
    ', ys)  # 返回一个 数组元素个数这么多汗的二维数组 内容为原数组的一个元素为一行
    print('-------------------------------')
    # 两点间距离公式
    z = np.sqrt(xs ** 2 + ys ** 2)  # 对 xs 的每个元素平方加上 ys 的每个元素平方 再开方并返回
    print(z)
    

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

    xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
    yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
    cond = np.array([True, False, True, True, False])
    
    result = [(x if c else y)
              for x, y, c in zip(xarr, yarr, cond)]  # 如果c为True返回x的值 否则返回y的值
    print(result)
    
    
    # 同上功能
    result = np.where(cond, xarr, yarr)
    print(result)
    
    arr = np.random.randn(4, 4)  # 随机生成一个 4x4的矩阵
    print(arr)  # 打印这个矩阵
    print(arr > 0)  # 判断arr里的值是否 > 0 返回True 否则返回 False  最后返回一个 布尔类型的数组
    print(np.where(arr > 0, 2, -2))  # 将所有正值 替换为2 否则替换为 -2
    print(np.where(arr > 0, 2, arr))  # 用 2 替换所有 arr的正值
    

    数学和统计方法

    求平均值,求和

    arr = np.random.randn(5, 4)
    print(arr)
    print(arr.mean())  # 求平均值
    print(np.mean(arr))  # 求平均值
    print(arr.sum())  # 求和
    

    选择高维数组的轴

    # mean和sum这类的函数可以接受一个axis选项参数,用于计算该轴向上的统计值,最终结果是一个少一维的数组:
    arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    print(arr)
    # arr.mean(1)是“计算行的平均值”,arr.sum(0)是“计算每列的和”。
    print(arr.mean(axis=1))
    print(arr.sum(axis=0))
    

    累加函数

    arr = np.array([0, 1, 2, 3, 4, 5, 6, 7])
    print(arr.cumsum())   # 累加函数 第一项等于前一项和 第二项等于前两项和 第三项等前三项和...
    

    累积函数

    arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
    print(arr)
    print(arr.cumsum(axis=0))  # 累加函数(如cumsum)返回的是同样大小的数组,但是会根据每个低维的切片沿着标记轴计算部分聚类
    print(arr.cumprod(axis=1))  # 累积函数
    

    下面列出常用数据处理的聚合函数的表:
    第一张
    第二张
    第三张

    列出了全部的基本数组统计方法

    arr = np.random.randn(100)
    print((arr > 0).sum()) # .sum()方法疑是失效
    
    bools = np.array([False, False, True, False])
    print(bools.any()) # 测试数组中是否存在一个或多个True
    print(bools.all()) # 检查数组中是否所有的值都为 True
    # 以上两个方法也能用于非布尔类型数组,所有非0元素将会被当作True
    

    sort()函数

    # 例
    a = np.array([[3, 7], [9, 1]])
    print('我们的数组是:')
    print(a)
    print('
    ')
    print('调用sort()函数:')
    print(np.sort(a))
    print('
    ')
    print('沿轴 0 排序:')
    print(np.sort(a, axis=0))
    print('
    ')
    
    # 在sort函数中排序字段
    dt = np.dtype([('name', 'S10'), ('age', int)])
    a = np.array([('raju', 21), ('anil', 25), ('ravi', 17), ('amar', 27)], dtype=dt)
    print('我们的数组是:')
    print(a)
    print('
    ')
    print('按name排序:')
    print(np.sort(a, order='name'))
    

    argsort()函数

    # 没看懂 间接排序
    # numpy.argsort()
    # numpy.argsort()函数对输入数组沿给定轴执行间接排序,并使用指定排序类型返回数据的索引数组。 这个索引数组用于构造排序后的数组。
    arr = np.random.randn(5, 3)
    print(arr)
    
    arr.sort(1)
    print(arr)
    
    x = np.array([3, 1, 2])
    print('我们的数组是:')
    print(x)
    print('
    ')
    print('对 x 调用 argsort() 函数:')
    y = np.argsort(x)
    print(y)
    print('
    ')
    print('以排序后的顺序重构原数组:')
    print(x[y])
    print('
    ')
    print('使用循环重构原数组:')
    for i in y:
    print(x[i])
    

    函数使用键序列执行间接排序。 键可以看作是电子表格中的一列。 该函数返回一个索引数组,使用它可以获得排序数据。

    注意,最后一个键恰好是 sort 的主键。
    nm = ('raju', 'anil', 'ravi', 'amar')
    dv = ('f.y.', 's.y.', 's.y.', 'f.y.')
    ind = np.lexsort((dv, nm))
    print('调用 lexsort()函数:')
    print(ind)
    print('
    ')
    print('使用这个索引来获取排序后的数据:')
    print([nm[i] + ',' + dv[i] for i in ind])
    

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

    NumPy提供了一些针对一维ndarray的基本集合运算。最常用的可能要数np.unique了,它用于找出数组中的唯一值并返回已排序的结果:

    names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
    print(np.unique(names))  # 将names数组唯一化
    ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4])
    print(np.unique(ints))  # 将ints数组唯一化
    print(sorted(set(names)))  # 纯Python实现
    

    另一个函数np.in1d用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组:

    values = np.array([6, 0, 0, 3, 2, 5, 6])
    print(np.in1d(values, [2, 3, 6]))
    
  • 相关阅读:
    oracle 12c迁移数据及遇到的问题
    用最有效率的方法计算 2 乘以 8?
    Java 中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
    是否可以在 static 环境中访问非 static 变量?
    什么是值传递和引用传递?
    Java 支持的数据类型有哪些?
    JDK、JRE、JVM 分别是什么关系?
    idea设置方法注释
    Java中&和&&的区别
    int和Integer有什么区别?
  • 原文地址:https://www.cnblogs.com/Mrzhang3389/p/9684756.html
Copyright © 2011-2022 走看看