这只对
NumPy数组有意义。列表的行为是无用的,并且特定于Python 2(而不是Python 3)。您可能需要仔细检查原始对象是否确实是NumPy数组(请参见下文),而不是列表。
但在你的代码中,x是一个简单的列表。
以来
x < 2
是假的
即0
x [x <2]是x [0] x [0]被改变。 相反,x [x> 2]是x [True]或x [1] 所以,x [1]被改变。 为什么会发生这种情况? 比较的规则是:
>当您订购两个字符串或两个数字类型时,排序是以预期的方式完成的(字符串的字典排序,整数的数字排序)。
>当您订购数字和非数字类型时,数字类型将优先。
>当您订购两个不兼容的类型,而且都不是数字时,它们按字符串的字母顺序排序:
所以,我们有以下顺序
如果x是NumPy数组,那么语法更有意义,因为布尔数组索引。在这种情况下, 2不是一个布尔值;它是一个布尔数组,表示x的每个元素是否小于2. x [x < 2] = 0,然后选择小于2的x的元素,并将这些单元格设置为0.见Indexing。
>>> x = np.array([1., -1., -2., 3])
>>> x < 0
array([False, True, True, False], dtype=bool)
>>> x[x < 0] += 20 # All elements < 0 get increased by 20
>>> x
array([ 1., 19., 18., 3.]) # Only elements < 0 are affected