没有合适的资源?快使用搜索试试~ 我知道了~
详解Numpy中where()函数及其多维数组的应用
0 下载量 28 浏览量
2024-11-11
11:38:33
上传
评论
收藏 195KB PDF 举报
温馨提示
内容概要:本文档全面介绍了Numpy中的where()函数,从基本的概念到具体的案例实现,如条件判断和数组广播的应用,涵盖了一维到多维数据结构的各种操作技巧。 适合人群:对Python科学计算有兴趣的数据科学家、工程师和技术爱好者,尤其适用于熟悉Numpy基础知识的中级水平开发者。 使用场景及目标:①利用where()函数进行数组筛选与转换,提升数据分析效率;②掌握多条件组合、多维数据处理等高级用法;③学会处理含有NaN值的数据集。 阅读建议:本文提供了大量的实际代码示例,理论结合实践,推荐动手实践每一个示例,以便更好地理解和掌握where()函数的使用。
资源推荐
资源详情
资源评论
Numpy Where() 使用详细介绍
Numpy where()函数是一个功能强大的工具,可用于过滤列表、元组和 Numpy 数
组中的数组元素。它通过使用条件谓词来工作,类似于 SQL 查询中 WHERE 或
HAVING 子句中使用的逻辑。如果您不熟悉 SQL,也没关系 - 您无需了解它即
可继续学习本教程。
当您有一个数组并且需要根据其值以不同方式分析其元素时,通常会使用
np.where()。例如,您可能需要用零替换负数,或者用更有意义的值替换缺失值
(例如 None 或 )np.nan。运行 时 where(),您将生成一个包含分析结果的新数
组。
使用时,通常需要提供三个参数 where()。首先,提供一个条件,原始数组中的
每个元素都与该条件相匹配。然后,提供两个附加参数:第一个参数定义如果元
素符合条件,则要执行的操作;第二个参数定义如果元素不符合条件,则要执行
的操作。
如果你觉得这一切听起来与 Python 的三元运算符类似,那你就对了。逻辑是一
样的。
注意:在本教程中,您将使用二维数组。但是,相同的原理可应用于任何维度的
数组。
如何使用 Numpy 编写条件表达式 where()
最常见的使用场景之一 where()是当您需要根据某些条件用其他值替换
Numpy 数组中的某些元素时。
考虑以下数组:
Python
>>> import Numpy as np
>>> test_array = np.array(
... [
... [3.1688358, 3.9091694, 1.66405549, -3.61976783],
... [7.33400434, -3.25797286, -9.65148913, -0.76115911],
... [2.71053173, -6.02410179, 7.46355805, 1.30949485],
... ]
... )
首先,您需要将 Numpy 库导入到程序中。使用别名是标准做法 np,它允许您使
用这种缩写形式引用该库。
生成的数组有三行四列,每列包含一个浮点数。
现在假设您想将所有负数替换为正数:
Python
>>> np.where(
... test_array < 0,
... test_array * -1,
... test_array,
... )
array([[3.1688358 , 3.9091694 , 1.66405549, 3.61976783],
[7.33400434, 3.25797286, 9.65148913, 0.76115911],
[2.71053173, 6.02410179, 7.46355805, 1.30949485]])
结果是一个新的 Numpy 数组,其中负数被正数替换。仔细查看原始数组
test_array,然后查看新数组的相应元素 all_positives,你会发现结果正是你想要
的。
注意:上面的示例让您了解该函数的工作原理 where()。如果您在实践中这样做,
您很可能会使用 np.abs()或 np.absolute()函数。两者的作用相同,因为前者是后
者的简写:
Python
>>> np.abs(test_array)
array([[3.1688358 , 3.9091694 , 1.66405549, 3.61976783],
[7.33400434, 3.25797286, 9.65148913, 0.76115911],
[2.71053173, 6.02410179, 7.46355805, 1.30949485]])
再次,所有负值均已被删除。
在继续介绍 的其他用例之前 where(),您将仔细了解这一切是如何工作的。为了
实现上一个示例中的目标,您将 传入 test_array < 0 作为条件。在 Numpy 中,
这将创建一个布尔数组,它 where()使用:
Python
>>> test_array < 0
array([[False, False, False, True],
[False, True, True, True],
[False, True, False, False]])
布尔数组通常称为掩码,仅由 True 或元素组成 False。如果元素符合条件,则布
尔数组中相应的元素将为 True。否则,它将为 False。
此掩码数组始终与其所基于的原始数组具有相同的形状,从而在两者之间产生一
一对应关系。这意味着可以将掩码中的元素与中的相应元素进行匹配,以
test_array 确定如何将条件应用于每个 test_array 元素。
要了解这一点,请查看 的左上角元素 test_array,即 3.1688358。由于它不小于
零,因此布尔数组中的左上角元素为 False。相反, 顶行中的最后一个元素
test_array 确实符合条件,因为 -3.61976783 确实小于零。因此,布尔数组顶行
中的最后一个元素为 True。
在此示例中,您希望将其应用于与此布尔数组的值 test_array * -1 匹配的每个元
素 True。相反,如果原始元素为零或更多,test_array 则将改为应用原始元素。
换句话说,它将保持不变。
仔细回顾一下原始数组 test_array 和结果 all_positives 数组。你会发现 中的所有
负元素 test_array 都已被替换为相应的正元素,而原始的正元素并未改变。如果
元素是 0,它也不会改变。
注意:在本教程中,您将使用预定义数组来确保您的结果与显示的结果相匹配。
如果您想试验该 where()函数并使用随机数生成数组,您可以使用 Numpy 附带
的内置随机数生成器来实现。
剩余10页未读,继续阅读
资源评论
潜洋
- 粉丝: 103
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功