5. 筛选和过滤

2023-10-27

筛选和过滤

这小节与索引和切片有点类似,但倾向于从「整体」中统一筛选出「符合条件」的内容,而索引和切片更多的是依照「某种方法」切出一块内容。本小节内容同样非常重要,可以算第二个最重要的小节。主要包括以下内容:

  • 条件筛选
  • 提取(按条件)
  • 抽样(按分布)
  • 最大最小 index(特殊值)

这几个内容都很重要,使用的也非常高频。条件筛选经常用于 Mask 或异常值处理,提取则常用于结果过滤,抽样常用在数据生成(比如负样本抽样),最大最小 index 则常见于机器学习模型预测结果判定中(根据最大概率所在的 index 决定结果属于哪一类)。

rng = np.random.default_rng(42)
arr = rng.integers(1, 100, (3, 4))
arr
array([[ 9, 77, 65, 44],
       [43, 86,  9, 70],
       [20, 10, 53, 97]])

条件筛选

⭐⭐⭐

顾名思义,根据一定的条件对 array 进行筛选(标记)并后续处理。核心 API 是 np.where

⚠️ 需要注意的是:where 分别返回各维度的 index,赋值的是「不满足」条件的。

# 条件筛选,可以直接在整个 array 上使用条件
arr > 50
array([[False,  True,  True, False],
       [False,  True, False,  True],
       [False, False,  True,  True]])
# 返回满足条件的索引,因为是两个维度,所以会返回两组结果
np.where(arr > 50)
(array([0, 0, 1, 1, 2, 2]), array([1, 2, 1, 3, 2, 3]))
# 不满足条件的赋值,将 <=50 的替换为 -1
np.where(arr > 50, arr, -1)
array([[-1, 77, 65, -1],
       [-1, 86, -1, 70],
       [-1, -1, 53, 97]])

提取

在 array 中提取指定条件的值。

⚠️ 需要注意的是:提取和唯一值返回的都是一维向量。

# 提取指定条件的值
np.extract(arr > 50, arr)
array([77, 65, 86, 70, 53, 97])
# 唯一值,是另一种形式的提取
np.unique(arr)
array([ 9, 10, 20, 43, 44, 53, 65, 70, 77, 86, 97])

抽样

⭐⭐⭐⭐⭐

我们在跑模型时常常需要使用部分数据对整个过程快速验证,您当然可以使用 np.random 生成模拟数据。但有真实数据时,从真实数据中随机抽样会比较好。

rng = np.random.default_rng(42)
# 第一个参数是要抽样的集合,如果是一个整数,则表示从 0 到该值
# 第二个参数是样本大小
# 第三个参数表示结果是否可以重复
# 第四个参数表示出现的概率,长度和第一个参数一样

# 由于(0 1 2 3)中 2 和 3 的概率比较高,自然就选择了 2 和 3
rng.choice(4, 2, replace=False, p=[0.1, 0.2, 0.3, 0.4])
array([3, 2])
# 旧的 API
# 如果是抽样语料的 index,更多的方法是这样:
data_size = 10000
np.random.choice(data_size, 50, replace=False)
array([6339, 4894, 1531, 7814,  224, 9538, 9619, 3801, 3359, 3617, 2795,
       6627, 8501, 1681, 4212, 5085, 2439,  744, 9123, 6733, 5688, 5480,
       6983, 7058,  310, 1838, 5072,  746, 5873, 9372, 5953, 4944, 1780,
        464, 1247,  845, 1807, 7354, 4925,  547, 2996, 3909, 7344, 9617,
       8642,  661, 2453, 5475,  228, 2427])

最值 Index

⭐⭐⭐⭐⭐

这小节主要是两个 API:np.argmax(min)np.argsort,当然最常用的还是第一个,不用说,自然是可以(需要)指定 axis 的。

rng = np.random.default_rng(42)
arr = rng.uniform(1, 100, (3, 4))
arr
array([[77.62164881, 44.44896554, 86.00119407, 70.03943488],
       [10.32355744, 97.58661281, 76.3528305 , 78.82036622],
       [13.68324963, 45.58820785, 37.7090044 , 92.7497339 ]])
np.argmax/argmin
# 所有值中最大值的 Index,基本不这么用
np.argmax(arr)
5
# 按列(axis=0)最大值的 Index
np.argmax(arr, axis=0)
array([0, 1, 0, 2])
# 按行(axis=1)最小值的 Index
np.argmin(arr, axis=1)
array([1, 0, 0])
np.argsort
arr
array([[77.62164881, 44.44896554, 86.00119407, 70.03943488],
       [10.32355744, 97.58661281, 76.3528305 , 78.82036622],
       [13.68324963, 45.58820785, 37.7090044 , 92.7497339 ]])
# 默认按行(axis=1)排序的索引
np.argsort(arr)
array([[1, 3, 0, 2],
       [0, 2, 3, 1],
       [0, 2, 1, 3]])
# 数据按行(axis=1)排序的索引,同上
np.argsort(arr, axis=1)
array([[1, 3, 0, 2],
       [0, 2, 3, 1],
       [0, 2, 1, 3]])
# 数据按列(axis=0)排序索引
np.argsort(arr, axis=0)
array([[1, 0, 2, 0],
       [2, 2, 1, 1],
       [0, 1, 0, 2]])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5. 筛选和过滤 的相关文章

  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • 如何将数组列表转换为 Spark 数据帧

    假设我有一个列表 x 1 10 2 14 3 17 我想转换x具有两列的 Spark 数据框id 1 2 3 和value 10 14 17 我怎么能这么做呢 Thanks x 1 10 2 14 3 17 df sc paralleliz
  • 如何在 py_function 之后重塑(图像,标签)数据集

    我正在尝试读取自定义映射数据集进行训练 但是在使用 py function 映射数据集后 我得到了未知的形状 例如 def process path file path label get label file path img tf io
  • 在python中实现COM接口类型库

    我有一个插件 我正在尝试为我工作的公司的应用程序创建一个示例 我正在尝试用 Python 编写这个插件 插件架构的工作方式是插件需要实现在提供的 COM 类型库中定义的接口 因此 它是该类型库的 COM 客户端 并最终通过应用程序为其提供后
  • Python 和图形数据库。使用 java lib 包装器还是 REST api?

    我想问你在Python中使用图数据库 Neo4j 的最佳方法 你觉得我应该使用 neo4j python embedded neo4j python 嵌入式 http docs neo4j org chunked milestone pyt
  • 如何使用Python和h5py读取HDF5属性(元数据)

    我有一个 HDF5 文件 里面有多个文件夹 每个文件夹都添加了属性 有些将属性称为 元数据 我知道如何访问文件夹内的键 但不知道如何使用 Python 提取属性h5py包裹 以下是 HDFView 的属性 Folder1 800 4 Gro
  • Python str.format() 方法的默认 kwarg 值

    我希望尝试使现有字符串的复数化尽可能简单 并且想知道是否有可能得到str format 在查找 kwargs 时解释默认值 这是一个例子 string number of sheep sheep has run away dict comp
  • 在 python 中将变量传递给重定向上的模板

    我对 Python 比较陌生 所以请原谅任何幼稚的问题 我的主页有 2 个输入 一个用于 产品 一个用于 电子邮件 当用户单击 提交 时 他们应该被发送到 success 其中会显示 您已请求 产品 您将通过 电子邮件 收到通知 我试图找出
  • 如何在Python中增加文件名

    我正在尝试保存大量需要分成不同文件的数据 如下所示 数据 1 dat 数据 2 dat 数据 3 dat 数据 4 dat 我如何在Python中实现这个 from itertools import count filename data
  • 如何在 python 3.x 中使用 string.replace()

    The string replace 在 python 3 x 上已弃用 这样做的新方法是什么 与 2 x 一样 使用str replace https docs python org library stdtypes html str r
  • Python极坐标图:绘制与角度对应的值

    我正在尝试绘制以不同角度记录的传感器数据 import pandas as pd import matplotlib pyplot as plt create dataframe each row contains an angle and
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码

随机推荐