这段代码是如何工作的?他们正在根据条件删除数组中的项。语法让我很困惑

时间:2018-04-25 03:12:12

标签: arrays python-3.x numpy

问题图片

enter image description here

他们在“= -1”

的部分失去了我

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

  • 这里有什么步骤来替换那些奇数 负1?
  • 有人可以更深入地解释“arr [arr%2 == 1]” 作品?我想我对它有一个非常简单的理解。

此外,这种特殊技术叫做什么?

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

原始网站链接:Source

1 个答案:

答案 0 :(得分:1)

就像你想要了解的其他任何东西一样,一步一步地去做。尝试打印出每个中间表达式:

  • arr是一个numpy数组。这很重要,因为所有这些步骤都依赖于特殊的numpy功能 - 它们不适用于普通列表。
  • arr % 2是一个大小相同的数组,包含每个原始数字的奇偶校验 - 0表示偶数,1表示奇数。
  • arr % 2 == 1将其转换为布尔数组 - 偶数为假,奇数为真。
  • arr[arr % 2 == 1]调用numpy的特殊布尔索引功能 - 它为您提供了一个(可能是不连续的)数组子集的视图,只要索引值为True。在这种情况下,视图仅包含原始数组的奇数。
  • arr[arr % 2 == 1] = -1为视图中的每个元素分配相同的值,覆盖所有原始奇数。

在所有步骤中使用的关键numpy概念是“广播” - 基本上,每当在数组和单个元素之间尝试操作时,单个元素被有效地复制以匹配数组的大小。因此,在arr % 2中,2在概念上成为2的数组,与arr的大小相同。