问题图片
他们在“= -1”
的部分失去了我这是我对解决方案的理解(到目前为止)。 他们采用了arr变量并扫描了除以2时余数为1的元素。= -1部分是我感到困惑的地方。
此外,这种特殊技术叫做什么?
编辑: 所以我尝试了他们提供的解决方案,它甚至没有运行......不确定我是否在我的方面做错了什么。
原始网站链接:Source
答案 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
的大小相同。