首页 > 其他分享 >【numpy基础】--数组过滤

【numpy基础】--数组过滤

时间:2023-06-29 22:55:50浏览次数:41  
标签:False -- numpy 过滤 arr2 arr1 print True

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

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

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

1. 比较

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

1.1. 数组和单个数字

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

1.2. 数组和数组

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

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]]

2. 掩码

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

[[ True True False]
[ True True True]
[False False False]]

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

3. 过滤

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

3.1. 单条件过滤

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]

3.2. 多条件过滤

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

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大的元素。

4. 总结回顾

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

标签:False,--,numpy,过滤,arr2,arr1,print,True
From: https://www.cnblogs.com/wang_yb/p/17515408.html

相关文章

  • 38. 最短路径
    一、什么是最短路径  在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径,这条路径就是两点之间的最短路径(ShortestPath),其中第一个顶点为源点(Source),最后一个顶点为终点(Destination)。单源最短路径问题:从某固定源点触发,求其到所有其它顶点的最短路径;多源......
  • Splash反爬
    为什么要反爬爬虫:使用任何技术手段,批量获取网站信息的一种方式。关键在于批量反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。关键也在于批量因爬虫的访问频率过高影响服务器的运行影响别人业务导致服务器宕机单一的DoS攻击一般是采用一对一方式的......
  • 计算机专业学生暑假要去看这些经典书籍!
    好书在精不在多,每一本经典书籍都值得反复咀嚼,温故而知新!分享几本经典书籍。重构改善既有代码的设计就像豆瓣评论所说的,看后有种醍醐灌顶、欲罢不能的感觉。无论你是初学者,还是深耕多年的老手,这本书都值得你深度品读。作者有丰富的编程经验和思想,总结了一套非常实用的重构的基......
  • [FAQ] 英文字母输入时变成了胖体
     如下,在输入法上右键,切换为”半角”即可。 Link:https://www.cnblogs.com/farwish/p/17513598.html......
  • Celery的基本使用
    day11——celerycelery介绍架构和安装#celery:分布式的异步任务框架,主要用来做: 异步任务延时任务定时任务---》如果只想做定时任务,可以不使用celery,有别的选择#celery框架,原理1)可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket)2)celery服务为为其他......
  • [GPT] vue 的 quasar 框架 在 layout 模版中 如何获取 子页面当前使用的 useMeta
     在Quasar框架中,用VueRouter的meta字段来获取子页面当前使用的useMeta。首先,您需要在路由配置中设置子页面的meta字段。例如:  constroutes=[{path:'/page',component:PageComponent,meta:{useMeta:{//在这里定义您......
  • 【QoS预测】基于深度协同过滤的位置感知QoS预测
    论文题目:JiaZ,JinL,ZhangY,etal.Location-AwareWebServiceQoSPredictionviaDeepCollaborativeFiltering[J].IEEETransactionsonComputationalSocialSystems,2022.问题:目前有大量具有类似功能的web服务,用户根据服务质量(QoS)选择最佳。因此,QoS预测是服务推......
  • 欧拉定理
    欧拉定理定理内容对于两个互质的整数a,n有\(a^{\varphi(n)}\equiv1(mod\enspacen)\)这里的\(\varphi(n)\)指的是欧拉函数。-数学证明由\(\varphi(n)\)可知从1到n与n互质的有\(m_1,m_2,m_3\dotsm_{\varphi(n)}\)。全部乘以a得\(am_1,am_2,am_3\dotsam_{\varphi(n)}\),由起......
  • 12 | 为什么我的MySQL会“抖”一下?
    一下内容出自《MySQL实战45讲》12|为什么我的MySQL会“抖”一下?一条SQL语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。看上去,这就像是数据库“抖”了一下。这个时候,MySQL可能是在刷脏页(fl......
  • kratos http原理
    概念kratos为了使http协议的逻辑代码和grpc的逻辑代码使用同一份,选择了基于protobuf的IDL文件使用proto插件生成辅助代码的方式。protochttp插件的地址为:https://github.com/go-kratos/kratos/tree/main/cmd/protoc-gen-go-http示例syntax="proto3";packagehelloworld;......