首页 > 解决方案 > 这段代码是如何工作的?他们正在根据条件删除数组中的项目。语法让我困惑

问题描述

问题图片

在此处输入图像描述

他们在“ = -1”的部分失去了我

这是我对解决方案的理解(到目前为止)。他们使用 arr 变量并扫描除以 2 时余数为 1 的元素。 = -1 部分是我感到困惑的地方。

另外,这种特殊的技术叫什么?

编辑:所以我尝试了他们提供的解决方案,但它甚至没有运行......不确定我是否做错了什么。

原文链接:来源

标签: arrayspython-3.xnumpy

解决方案


就像你试图理解的任何其他事情一样,一步一步地进行。尝试打印出每个中间表达式:

  • 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 % 22理论上变成了 s 的数组,2大小与 相同arr


推荐阅读