0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Numpy基础之数组过滤功能介绍

冬至子 来源:数据之书 作者:databook 2023-08-09 16:28 次阅读

numpy中,数组可以看作是一系列数值的有序集合,可以通过下标访问其中的元素。 处理数组的过程中,经常需要用到数组过滤功能。

过滤功能可以在处理数据时非常有用,因为它可以使数据更加干净和可读性更强。 例如,在进行数据分析时,通常需要去除异常值,过滤掉不必要的元素可以使数据更加易于分析和处理。

numpy本身提供了很多针对特定要求的过滤函数, 不过本篇只介绍最基本的过滤方式,通过最基本的过滤方式来揭示其过滤的原理。

比较

比较是过滤的前提,因为通过比较才能确定过滤的条件。

数组和单个数字

import numpy as np

arr = np.random.randint(0, 10, (3, 3))
print(arr)
#运行结果
[[4 1 4]
 [7 6 1]
 [8 9 5]]

print(arr > 5)
#运行结果
[[False False False]
 [ True  True False]
 [ True  True False]]

数组和单个数字比较,也满足上一篇介绍的广播原则,也就是数组arr的每个元素都和数字5进行了比较。

比较的结果是和arr相同结构的数组,数组中的元素是bool值。 满足比较条件是True不满足比较条件的是False

数组和数组

除了和单个数字比较之外,数组之间也是可以比较的。

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#运行结果
[[9 7 3]
 [2 8 5]
 [2 2 3]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#运行结果
[[1 6 0]
 [0 1 8]
 [9 0 5]]

print(arr1 > arr2)
#运行结果
[[ True  True  True]
 [ True  True False]
 [False  True False]]

数组之间的比较就是相同位置的元素之间比较,如果两个数组的结构不一样,会按照上一篇介绍的广播计算方式来扩充数组。 比如:

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#运行结果
[[9 6 0]
 [1 4 9]
 [1 1 4]]

arr2 = np.random.randint(0, 10, (3, 1))
print(arr2)
#运行结果
[[1]
 [0]
 [9]]

print(arr1 > arr2)
#运行结果
[[ True  True False]
 [ True  True  True]
 [False False False]]

上面的数组arr2,按广播规则被扩充成:

[[1 1 1]

[0 0 0]

[9 9 9]]

掩码

所谓掩码,其实就是上面的各个示例中的比较结果。 也就是只包含bool值的数组,比如:

[[ True True False]

[ True True True]

[False False False]]

我们就是根据这个掩码,来过滤出数组中的True 或者 False 位置的元素。

过滤

过滤就是根据掩码,选择出符合条件的元素。

单条件过滤

arr = np.random.randint(0, 10, (3, 3))
print(arr)
#运行结果
[[8 4 0]
 [2 2 9]
 [9 5 9]]

print(arr[arr > 5])
#运行结果
[8 9 9 9]

最后得到的是arr中值大于5的元素数组。 其中 arr > 5 的结果就是上一节提到的掩码,最后过滤出的元素就是根据这个掩码得到的。

除了跟单独的数字比较,也可以和数组比较:

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#运行结果
[[3 4 7]
 [4 6 2]
 [7 2 1]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#运行结果
[[2 3 1]
 [7 7 7]
 [1 6 4]]

print(arr1[arr1 > arr2])
#运行结果
[3 4 7 7]

多条件过滤

多条件过滤使用 &| 来连接不同的条件。

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#运行结果
[[1 0 5]
 [7 4 9]
 [8 5 4]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#运行结果
[[6 4 1]
 [0 1 1]
 [8 5 8]]

print(arr1[(arr1 > 5) & (arr1 > arr2)])
#运行结果
[7 9]

过滤arr1大于5** 并且 **对应位置比arr2大的元素。

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#运行结果
[[1 0 5]
 [7 4 9]
 [8 5 4]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#运行结果
[[6 4 1]
 [0 1 1]
 [8 5 8]]

print(arr1[(arr1 > 5) | (arr1 > arr2)])
#运行结果
[5 7 4 9 8]

过滤arr1大于5 或者对应位置比arr2大的元素。

总结回顾

本篇主要介绍了过滤的基本原理,首先从比较开始,比较的结果是掩码,最后通过掩码过滤数组。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18304

    浏览量

    222351
  • 比较器
    +关注

    关注

    14

    文章

    1527

    浏览量

    106506
  • 过滤器
    +关注

    关注

    1

    文章

    407

    浏览量

    19015
收藏 人收藏

    评论

    相关推荐

    什么是NumPy?选择NUMPY的原因及其工作原理是什么

    NumPy 是一个免费的 Python 编程语言开源库,它功能强大、已经过充分优化,并增加了对大型多维数组(也称为矩阵或张量)的支持。
    的头像 发表于 07-15 09:37 2739次阅读

    numpy数组的基本用法

    numpy提供了一种数据类型,提供了数据分析的运算基础,安装方式
    发表于 09-04 16:24 145次阅读
    <b class='flag-5'>numpy</b><b class='flag-5'>数组</b>的基本用法

    labview如何显示5以上的数组

    用随机数生成0-10之间的数组,怎样把低于5以下的数组过滤掉?显示大于或者等于5的数组
    发表于 03-05 21:02

    过滤组、过滤器编号介绍

    一、过滤组、过滤器编号介绍 在STM32互联型产品中,CAN1和CAN2分享28个过滤器组,其它STM32F103xx系列产品中有14个过滤
    发表于 08-20 06:13

    STM32 CAN过滤组、过滤器编号介绍

    一、过滤组、过滤器编号介绍 在STM32互联型产品中,CAN1和CAN2分享28个过滤器组,其它STM32F103xx系列产品中有14个过滤
    发表于 08-23 06:51

    TCP-IP详解卷2_BPF:BSD 分组过滤程序

    TCP-IP详解卷2 BPF:BSD 分组过滤程序,学习TCP很好的资料。欢迎下载。
    发表于 05-09 14:13 0次下载

    Python中NumPy扩展包简介及案例详解

    NumPy是Python语言的一个扩展包。支持多维数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy提供了与Matlab相似的功能
    发表于 11-15 12:31 1867次阅读

    基于python的numpy深度解析

    numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。numpy支持高级大量的维度数组与矩阵运算,此外
    的头像 发表于 01-24 13:55 5007次阅读
    基于python的<b class='flag-5'>numpy</b>深度解析

    NumPy 诞生过去15年后 其核心开发团队的论文终于在 Nature 上发表

    了: 功能强大的 N 维数组对象。 精密广播功能函数。 集成 C/C++ 和 Fortran 代码的工具。 强大的线性代数、傅立叶变换和随机数功能 今日,
    的头像 发表于 09-21 16:25 2869次阅读
    <b class='flag-5'>NumPy</b> 诞生过去15年后  其核心开发团队的论文终于在 Nature 上发表

    图解NumPy的核心概念:向量、矩阵、3维及更高维数组

    。同时,在、、等深度许欸小框架中,了解numpy将显著提高数据共享和处理能力,甚至无需过多更改就可以在运行计算。 n维数组NumPy的核心概念,这样的好处,尽管一维和而为数组的处理方
    的头像 发表于 02-11 10:01 5776次阅读
    图解<b class='flag-5'>NumPy</b>的核心概念:向量、矩阵、3维及更高维<b class='flag-5'>数组</b>

    图文详解NumPy看这一篇就够了

    写下来,让学习过程变得轻松有趣。在Reddit机器学习社区发布不到半天就收获了500+赞。 下面就让我们跟随他的教程一起来学习吧! 教程内容分为向量 (一维数组)、矩阵 (二维数组)、三维与更高维数组3个部分。
    的头像 发表于 05-26 09:45 2986次阅读
    图文详解<b class='flag-5'>NumPy</b>看这一篇就够了

    Numpy详解-轴的概念

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的
    的头像 发表于 04-25 10:25 2575次阅读

    Numpy数组的高级操作总结

    NumPy 包含一个迭代器对象numpy.nditer。它是一个有效的多维迭代器对象,可以用于在数组上进行迭代。数组的每个元素可使用 Python 的标准Iterator接口来访问。
    的头像 发表于 05-13 12:53 1117次阅读

    一文详解Numpy的高级操作

    NumPy 包含一个迭代器对象numpy.nditer。它是一个有效的多维迭代器对象,可以用于在数组上进行迭代。数组的每个元素可使用 Python 的标准Iterator接口来访问。
    的头像 发表于 07-19 09:57 932次阅读

    List和Numpy Array有什么区别

    Numpy 是Python科学计算的一个核心模块。它提供了非常高效的数组对象,以及用于处理这些数组对象的工具。一个Numpy数组由许多值组成
    的头像 发表于 10-30 10:49 357次阅读
    List和<b class='flag-5'>Numpy</b> Array有什么区别