arrays - 这段代码是如何工作的?他们正在根据条件删除数组中的项目。语法让我困惑
问题描述
问题图片
他们在“ = -1”的部分失去了我
这是我对解决方案的理解(到目前为止)。他们使用 arr 变量并扫描除以 2 时余数为 1 的元素。 = -1 部分是我感到困惑的地方。
- 将这些奇数替换为负 1 的步骤是什么?
- 有人可以更深入地解释“arr [arr % 2 == 1]”是如何工作的吗?我想我对它的理解很简单。
另外,这种特殊的技术叫什么?
编辑:所以我尝试了他们提供的解决方案,但它甚至没有运行......不确定我是否做错了什么。
原文链接:来源
解决方案
就像你试图理解的任何其他事情一样,一步一步地进行。尝试打印出每个中间表达式:
arr
是一个 numpy 数组。这很重要,因为所有这些步骤都依赖于特殊的 numpy 功能——它们不适用于普通列表。arr % 2
是一个大小相同的数组,包含每个原始数字的奇偶校验 - 0 表示偶数,1 表示奇数。arr % 2 == 1
将其转换为布尔数组 - 偶数为 False,奇数为 True。arr[arr % 2 == 1]
调用 numpy 的特殊布尔索引功能 - 它为您提供数组的(可能不连续的)子集的视图,无论索引值为 True。在这种情况下,视图只包含原始数组的奇数。arr[arr % 2 == 1] = -1
为视图中的每个元素分配相同的值,覆盖所有原始奇数。
所有步骤中使用的一个关键 numpy 概念是“广播” - 基本上,每当尝试在数组和单个元素之间进行操作时,都会有效地复制单个元素以匹配数组的大小。因此,在 中arr % 2
,2
理论上变成了 s 的数组,2
大小与 相同arr
。
推荐阅读
- java - 从另一个插件访问内置 intelij 插件
- feathersjs - FeathersJS 从 1 次 REST 调用将 2 条记录插入 MySql
- amazon-web-services - AWS Lambda:从 S3 上传事件中读取图像
- python - 无法使用 QInputDialog 自动关闭第二个窗口
- python - + 不支持的操作数类型:'int' 和 'str' - 尝试对一行中的所有整数求和
- java - 如何正确解析java中的tcp数据包?
- fortran - 程序在读取文件时收到信号 SIGSEGV
- javascript - 单击具有 html 数据属性的元素时如何触发操作
- c# - C#如何从json文件动态地制作treeview
- python-3.x - 模块“numpy”没有属性“max”